kreshim
I'm new here

Deployment modifizieren

Hallo zusammen,

ich habe folgendes Problem bei der Generierung von Medien:

Wenn ich einen Ordner angebe für den Generierungsprozess, werden nur die Bilder generiert (in allen Auflösungen). Technische Medien (CSS, JS Files) werden dabei nicht generiert. Ich habe ein Template erstellt in dem ich einen Ordner angeben kann und der Code alles was sich in dem Ordner befindet referenziert. Wenn ich diese Seite in die Generierung einbeziehe, wird nun alles was sich in meinem Medienordner befindet generiert. Das Problem ist aber, dass alle Bilder generiert werden. Das sorgt bei uns für einen Overhead bzw. es wird einfach viel zu viel generiert.

Meine Frage ist: Gibt es eine Möglichkeit zu sagen, dass nur referenzierte Bilder generiert werden und nicht alle?

Mein Code aus dem Template:

$CMS_SET(mediastore,#global.project.userService.getStore("MEDIASTORE", true, false))$

$CMS_SET(folder,mediastore.getStoreElement(mediafolder.getUid(),"MEDIASTORE_FOLDER"))$

$CMS_SET(files,folder.children(class("de.espirit.firstspirit.access.store.mediastore.Media"), true).toList())$

$CMS_FOR(file,files)$

        $CMS_IF(file.getReferenceString() != null)$

         $CMS_REF(file)$<br />

    $CMS_END_IF$

$CMS_END_FOR$

Viele Grüße

0 Kudos
4 Replies
Peter_Jodeleit
Crownpeak employee

Du kannst in deiner Schleife für jedes "file" auf "file.incomingReferences.length > 0" prüfen.

Das "toList" solltest du übrigens nicht verwenden, das ist einerseits überflüssig und sorgt andererseites dafür, das sich potentiell große Datenmengen im Heap ansammeln, was sogar zu einem OutOfMemoryError führen kann.

[EDIT]

Wofür ist das "file.getReferenceString() != null"? Abgesehen davon gibt es die die Methode nicht auf der Klasse.

Peter

Vielen Dank für deine Antwort. Vom Code her scheint es nun zu klappen. In der Vorschau meiner Seite sehe ich nun nur die referenzierten Files. (siehe Screenshot).

referenzierte Files.jpg

Binde ich nun meine Seite in die Generierung ein, erhalte ich beim Generierungsprozess einen Fehler:

WARN  28.09.2012 14:00:44.437 {seID=3649945} (de.espirit.firstspirit.generate.SiteProduction):

Replacing null value with empty default! Undefined method 'de.espirit.firstspirit.parser.eval.Undefined#getReferenceString()'!

ERROR 28.09.2012 14:00:44.437 {seID=3649945} (de.espirit.firstspirit.generate.SiteProduction):

invalid target type for $CMS_REF()$: null (Undefined variable 'file'!)

INFO  28.09.2012 14:00:44.438 {seID=3649945} (de.espirit.firstspirit.server.scheduler.GenerateTaskExecutor):

generating 'deploy2' (id=3750744), language DE, template set 'xml'

Der Code sieht nun folgendermaßen aus:

$CMS_SET(mediastore,#global.project.userService.getStore("MEDIASTORE", true, false))$

$CMS_SET(folder,mediastore.getStoreElement(mediafolder.getUid(),"MEDIASTORE_FOLDER"))$

$CMS_SET(files,folder.children(class("de.espirit.firstspirit.access.store.mediastore.Media"), true))$

$CMS_FOR(file,files)$

    $CMS_IF(file.incomingReferences.length > 0)$

         $CMS_REF(file)$<br />

    $CMS_END_IF$

$CMS_END_FOR$

0 Kudos

Hallo,

gibt ein $CMS_VALUE(folder)$ einen korrekten Wert aus, oder wurde der Ordner eventuell schon nicht gefunden?

Als ich das beschriebene Verhalten in FirstSpirit 5 nachgestellt habt, lieferte folgende Zeile null zurück:

$CMS_SET(folder,mediastore.getStoreElement(mediafolder.getUid(),"MEDIASTORE_FOLDER"))$

Mit dieser Zeile funktionierte es dann:

$CMS_SET(folder,mediastore.getStoreElement(mediafolder.getUid(),class("de.espirit.firstspirit.access.store.IDProvider$UidType").MEDIASTORE_FOLDER))$

Viele Grüße

Rouven

kreshim
I'm new here

Hallo,

dank Ihrer Tipps erhalte ich nun das erhoffte Ergebnis bei der Generierung.

Vielen Dank!

Freundliche Grüße

0 Kudos