Skip to main content

SVG-Media File Content in Template?

Comments

3 comments

  • Holger Höbbel

    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("<","&lt;"))$

    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
    Holger

    P.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
  • Michael Bergmann

    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
    Michael

    0
  • Sammy Trojette

    Beides super Tipps!

    Probiere ich gleich beides Mal aus.

    Vielen Dank Euch beiden.

    0

Please sign in to leave a comment.