SVG-Media File Content in Template?
Hallo mal wieder.
Ich habe SVG Mediendateien (sprachunabhängige Bilder) und muss in einem Template irgendwie an den in der SVG Datei liegenden SVG Code rankommen.
Was ist der schnellste/einfachste Weg um das zu erreichen - wenn es denn einen gibt?
-
Hallo Sammy,
ich würde es so machen:
Ein Beanshell-Skript schreiben, dass aus einem InputStream einen Text erzeugt (habs mal in vier Zeilen aufgeteilt, geht natürlich auch als Einzeiler ;)svgMedia = context.getVariableValue("sc_SVG");
inputStream = svgMedia.getInputStream(context.getProject().getOriginalResolution());
text = new String(inputStream.readAllBytes(), context.getEncoding());
return text;Das Skript dann im Template aufrufen und als Variable "sc_SVG" das SVG übergeben:
$CMS_RENDER(script:"svgtotext","sc_SVG":ref(media:"UID_SVG").picture)$
Ich nehme aber an, dass der Code weiterverarbeitet werden soll, so dass die direkte Ausgabe mittels $CMS_RENDER(...)$ nicht gewünscht ist. Also mittels CMS_SET das Ganze in eine Variable übergeben:
$CMS_SET(set_myTempFragment)$$CMS_RENDER(script:"svgtotext","sc_SVG":ref(media:"UID_SVG").picture)$$CMS_END_SET$
$CMS_SET(set_myString,set_myTempFragment.toString())$
$CMS_VALUE(myString.replaceAll("<","<"))$Die letzte Zeile gibt den SVG Quell-Code dann innerhalb eines HTML Dokuments aus (ohne die Umwandlung der "<" Zeichen würden [die meisten Browser] ja das SVG rendern).
Viele Grüße
HolgerP.S.: Ich habe kurz versucht ohne Skript auszukommen, aber auf die Schnelle ist mir kein Weg eingefallen, wie ich einen InputStream innerhalb von Template-Code in einen String umwandeln kann.
P.P.S.: Um das SVG selber auszugeben reicht es [bei den meisten Browsern] völlig aus einfach folgendes auszugeben:
<img src="$CMS_REF(media:"UID_SVG")$" />
0 -
Hi
kleiner Hinweis: Es gibt in der FS API eine "Utility-Klasse" Streams, insbesondere
String Streams.toString(InputStream inputStream, String encoding).
Von daher sollte (selbst jetzt nicht getestet!) man das letztlich auch ohne Skript rein templateseitig hinbekommen unter Verwendung von
class("de.espirit.common.tools.Streams").toString(...)
An den InputStream des Mediums (und die dazu nötigen Zwischen-Elemente...) sollte man ja auch im Template kommen.
Viele Grüße
Michael0 -
Beides super Tipps!
Probiere ich gleich beides Mal aus.
Vielen Dank Euch beiden.
0
Please sign in to leave a comment.
Comments
3 comments