Search the FirstSpirit Knowledge Base
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
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?
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?
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
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$ |
Hallo Alexander,
ich hatte es bei mir getestet... Welche FS-Version nutzt ihr denn?
Viele Grüße
Michael
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.
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
D.h. man kann über diesen Mechanismus class().methodName(parameters[]) beliebige Methodenauch aus eigenen Modulen aufrufen?
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