alwolf
I'm new here

Variable für Vorschaubild

Jump to solution

In Vorlagen ist es möglich ein Vorschaubild zu pflegen (Im Reiter Eigenschaften).

Kommt man im Ausgabekanal auch an dieses Vorschaubild heran?

Wir würden dies gerne in der HTML Preview nutzen ohne es doppelt pflegen zu müssen.

Beste Grüße,

Alexander Wolf, USU

1 Solution

Accepted Solutions

Hallo Michael,

das ist EXTAKT was ich benötige, nur klappt es leider nicht?

Fehlermeldung:

08.07.2016 11:01:44.919 ERROR ($CMS_VALUE(class("de.espirit.common.tools.Streams").toBase64(#global.section.template.previewImage))$ at 4, 46): de.espirit.common.tools.Streams

Ist der Klassenname/pfad korrekt?

View solution in original post

0 Kudos
10 Replies
mbergmann
Crownpeak employee

Hallo Alexander,

da die Preview-Bilder nicht als Medienobjekte hinterlegt sind (und somit keine "echte URL" haben), bleibt soweit ich sehe nur die Möglichkeit einer inline Base64-Codierung.

D.h. wenn Du im Ausgabekanal das Template-Objekt hast, bekommst Du mit myTemplate.getPreviewImage() ein Byte-Array. Das muss dann noch in Base64 verwandelt werden. Hierzu kannst Du die Utility-Klasse Streams nutzen.

Mal als Beispiel eine Ausgabe, die das Vorschaubild des Seitentemplates der aktuellen Seite anzeigt:

<img src="data:image;base64, $CMS_VALUE(class("de.espirit.common.tools.Streams").toBase64(#global.page.template.previewImage))$" />

Viele Grüße

Michael

Hallo Michael,

das ist EXTAKT was ich benötige, nur klappt es leider nicht?

Fehlermeldung:

08.07.2016 11:01:44.919 ERROR ($CMS_VALUE(class("de.espirit.common.tools.Streams").toBase64(#global.section.template.previewImage))$ at 4, 46): de.espirit.common.tools.Streams

Ist der Klassenname/pfad korrekt?

0 Kudos
mbergmann
Crownpeak employee

Hallo Alexander,

liegt es vielleicht einfach daran, dass das konkrete Template kein PreviewImage hat? Das müsste man natürlich vorher prüfen.

Viele Grüße

Michael

0 Kudos

Nein die Variable ist gefüllt. Ich habe testeweise auch direkt das byte[] ausgegeben. Nur die Konvertierung klappt leider nicht. Die Prüfung hatte ich auch bereits drin.



$CMS_IF(!#global.section.template.previewImage.isEmpty)$


VORSCHAUBILD: <img src="data:image;base64, $CMS_VALUE(class("de.espirit.common.tools.Streams").toBase64(#global.section.template.previewImage))$" />


$CMS_END_IF$

0 Kudos
mbergmann
Crownpeak employee

Hallo Alexander,

ich hatte es bei mir getestet... Welche FS-Version nutzt ihr denn?

Viele Grüße

Michael

0 Kudos

FirstSpirit SiteArchitect 5.1.311.65223

- wobei ich eine Lösung für unsere Standardvorlagen suche. Da wäre ich natürlich glücklich wenn es zumindest mit 5.1 und 5.2 liefe.

0 Kudos
mbergmann
Crownpeak employee

Hallo Alexander,

Ja, dann geht es damit nicht. Die entsprechende Klasse gibt es - wie man auch im verlinkten JavaDoc sieht - erst ab 5.2 (Die 5.1 ist übrigens nicht mehr in der Wartung!).

Du könntest - da Du letztlich nur die Funktion zum Base64-Codieren brauchst - natürlich auch eine andere Utility-Klasse (z.B. in einem Modul) benutzen.

Viele Grüße

Michael

0 Kudos

D.h. man kann über diesen Mechanismus class().methodName(parameters[]) beliebige Methodenauch aus eigenen Modulen aufrufen?

0 Kudos
mbergmann
Crownpeak employee

Ja, kann man, siehe entsprechendes Kapitel im ODFS.

Man muss das Ganze aber sehr vorsichtig und so sparsam wie nur irgend möglich benutzen, da das so nur funktioniert wenn die Modul-Resourcen mit scope="server" in der module.xml stehen. Das wiederum will man eigentlich nicht, weil es zu Classloading-Konflikten führen kann (gleiche Libs in verschiedenen Versionen mit scope="server" in verschiedenen Modulen). Letztlich kann man dadurch mit einem seiner Module diverse andere "zerschießen", da scope="server" immer bevorzugt angezogen wird.

Besser ist für eigene Klassen hier, den Umweg über ein Executable (als Renderscript) zu gehen, das einem ein entsprechendes Objekt liefert. Da kann man die ganzen Resourcen nämlich schön im Module-Scope lassen weil für Executables eine Sonderbehandlung gilt.

Aber: Ihr werdet ja wahrscheinlich demnächst sowieso auf 5.2 upgraden. Da könntest Du theoretisch mal schauen ob es in den Klassen bzw. mitgelieferten Fremd-Libs der fs-server.jar etwas entsprechendes gibt, das man über den class()-Mechanismus holen kann - das wäre dann allerdings nicht offizielle "API". Das sollte dann natürlich unbedingt wieder umgebaut werden sobald ihr upgradet. Ob ihr dieses (in diesem Fall sehr geringe, denn man kann es ja auch wieder ausbauen) "Risiko" der Nicht-API-Nutzung eingehen wollt müsst ihr entscheiden.

Viele Grüße

Michael