julian98
Occasional Observer

Generierung von allen Medien (auch wenn nicht verwendet)?

Jump to solution

Hallo zusammen,

ich habe eine Frage, die die Generierung von Medien betrifft.

Ist es möglich, dass ein einzelnes Verzeichnis bei einer Vollgenerierung ausnahmslos immer vollständig generiert wird?

Hintergrund ist, dass eingebettete CSS-Files (oder JavaSkript-Bibliotheken) oft Referenzen auf andere Dateien (z.B. SVGs oder andere JavaSkript-Dateien) mit sich bringen.

Nun wäre es natürlich schön, wenn lediglich die "übergeordnete" Datei durch ein $CMS_REF()$ (z.B. in den HTML-Head) eingebunden wird und man nicht jede einzelne externe Referenz innerhalb der CSS- oder JavaSkript-Bibliothek manuell durch ein $CMS_REF()$ ersetzen muss, damit die Generierung erkennt, dass die jeweilige Datei verwendet wird.

Dies macht z.B. ein Updaten der jeweiligen Bibliothek deutlich schwieriger.

Gibt es hier vielleicht Lösungsansätze zu? Die Auslagerung aller CSS- und JS-Dateien auf einen externen Server sollte möglichst vermieden werden.

Vielen Dank im Voraus!

Viele Grüße

Julian

1 Solution

Accepted Solutions
hoebbel
Crownpeak employee

Hallo Julian,

hier gibt es mehrere Lösungsansätze:

  • Die Referenzen in den CSS Files über CMS_REF Aufrufe erzeugen und den Haken bei Datei parsen aktivieren --> beider ersten Verwendung der CSS Datei in der Generierung werden die Referenzen von FirstSpirit erzeugt und die verlinkten Medien automatisch mit in das Generierungsverzeichnis kopiert
  • Zusätzlich eine Teilprojekt Generierung definieren, die den/die Medien-Ordner erzeugt. Hierbei muss darauf geachtet werden, dass das Generierungsverzeichnis nur von der ersten Generierungsaktion geleert wird!
    • Nachteil: Eine solche Generierung mit dem Startpunkt in der Medien-Verwaltung hat keine Sprache und keinen Ausgabekanal. Deshalb werden Medien, bei denen die Option "Datei parsen" aktiviert ist, hierbei nicht erzeugt. Bei Bildern werden alle Auflösungen berechnet und mit in das Generierungsverzeichnis kopiert.
  • Verzeichnis mit Templatemitteln generieren. Wenn das Verzeichnis über die GUI ausgewählt werden soll, dann würde ich das so machen:

FS_REFERENCE definieren, mit der man nur MediaFolder auswählen kann:

  <FS_REFERENCE name="pt_mediafolder">

    <FILTER>

      <ALLOW type="mediafolder"/>

    </FILTER>

    <LANGINFOS>

      <LANGINFO lang="*" label="mediafolder"/>

    </LANGINFOS>

    <PROJECTS>

      <LOCAL name=".">

        <SOURCES>

          <FOLDER name="root" store="mediastore"/>

        </SOURCES>

      </LOCAL>

    </PROJECTS>

  </FS_REFERENCE>

Den Inhalt des Ordners (wenn auch die Medien aus Unterordnern berücksichtigt werden sollen, in der zweiten Zeile "false" durch "true" ersetzen) referenzieren, aber nicht ausgeben:

$CMS_SET(mediaClass,class("de.espirit.firstspirit.access.store.mediastore.Media"))$

$CMS_FOR(media, pt_mediafolder.get.getChildren(mediaClass, false))$

$CMS_SET(void,ref(media).url)$

$CMS_END_FOR$

Gegebenenfalls kann man die erzeugte Seite hinterher auch noch löschen, wenn dort nichts sinnvolles ausgegeben wird: $CMS_SET(#global.stopGenerate,true)$

Ich hoffe, einer dieser Wege führt Dich zum Ziel.

Viele Grüße aus Dortmund

Holger

View solution in original post

0 Kudos
2 Replies
hoebbel
Crownpeak employee

Hallo Julian,

hier gibt es mehrere Lösungsansätze:

  • Die Referenzen in den CSS Files über CMS_REF Aufrufe erzeugen und den Haken bei Datei parsen aktivieren --> beider ersten Verwendung der CSS Datei in der Generierung werden die Referenzen von FirstSpirit erzeugt und die verlinkten Medien automatisch mit in das Generierungsverzeichnis kopiert
  • Zusätzlich eine Teilprojekt Generierung definieren, die den/die Medien-Ordner erzeugt. Hierbei muss darauf geachtet werden, dass das Generierungsverzeichnis nur von der ersten Generierungsaktion geleert wird!
    • Nachteil: Eine solche Generierung mit dem Startpunkt in der Medien-Verwaltung hat keine Sprache und keinen Ausgabekanal. Deshalb werden Medien, bei denen die Option "Datei parsen" aktiviert ist, hierbei nicht erzeugt. Bei Bildern werden alle Auflösungen berechnet und mit in das Generierungsverzeichnis kopiert.
  • Verzeichnis mit Templatemitteln generieren. Wenn das Verzeichnis über die GUI ausgewählt werden soll, dann würde ich das so machen:

FS_REFERENCE definieren, mit der man nur MediaFolder auswählen kann:

  <FS_REFERENCE name="pt_mediafolder">

    <FILTER>

      <ALLOW type="mediafolder"/>

    </FILTER>

    <LANGINFOS>

      <LANGINFO lang="*" label="mediafolder"/>

    </LANGINFOS>

    <PROJECTS>

      <LOCAL name=".">

        <SOURCES>

          <FOLDER name="root" store="mediastore"/>

        </SOURCES>

      </LOCAL>

    </PROJECTS>

  </FS_REFERENCE>

Den Inhalt des Ordners (wenn auch die Medien aus Unterordnern berücksichtigt werden sollen, in der zweiten Zeile "false" durch "true" ersetzen) referenzieren, aber nicht ausgeben:

$CMS_SET(mediaClass,class("de.espirit.firstspirit.access.store.mediastore.Media"))$

$CMS_FOR(media, pt_mediafolder.get.getChildren(mediaClass, false))$

$CMS_SET(void,ref(media).url)$

$CMS_END_FOR$

Gegebenenfalls kann man die erzeugte Seite hinterher auch noch löschen, wenn dort nichts sinnvolles ausgegeben wird: $CMS_SET(#global.stopGenerate,true)$

Ich hoffe, einer dieser Wege führt Dich zum Ziel.

Viele Grüße aus Dortmund

Holger

0 Kudos
julian98
Occasional Observer

Hallo Holger,

die zweite Option mit der separaten Teilgenerierung finde ich für unseren Anwendungsfall am passendsten. Vielen Dank für den Hinweis!

Viele Grüße

Julian

0 Kudos