Ergebnis 1 bis 13 von 13

Thema: Kann man in einem Twig-Template auf files/ zugreifen?

  1. #1
    Contao-Nutzer Avatar von Baddy
    Registriert seit
    29.08.2019.
    Beiträge
    26

    Standard Kann man in einem Twig-Template auf files/ zugreifen?

    Nach etwas Recherche im Internet wie man mit Twig eine .svg-Datei in inline <svg> umwandelt, habe ich mich daran versucht eine Template-Variante für Image zu erstellen.
    Im Beispiel wurde
    PHP-Code:
    {{ source(pathToFile.svg) }} 
    verwendet, dachte ich mir "Kein Problem, hau ich easy in mein template rein, done.".
    Hierfür wollte ich die _picture Komponente bearbeiten.

    Testweise erstmal die line gesetzt im image Block, schauen ob alles so funktioniert wie ich mir das vorstelle.
    Direkt mal nicht geklappt, schmeißt diese Fehlermeldung:
    Code:
    Uncaught PHP Exception Twig\Error\LoaderError: "Template "/files/img/xxx/xxx.svg" is not defined."


    Hier der Block aus meinem Template. Nach "set img" kommt noch etwas code für proportions und img_attributes, ist allerdings irrelevant für das hier.
    PHP-Code:
    {% block image %}
          {% 
    set img figure.image.img %}
           ...
          {{ 
    source(img.src) }}
    {% 
    endblock %} 
    Was mich etwas stutzig macht ist das die Fehlermeldung "Template" sagt.
    In den Beispielen die ich gesehen habe hat source() ohne Probleme für .svg-Dateien funktioniert.
    Davon abgesehen, meine Vermutung ist, dass der angegebene Pfad im Template-Verzeichnis startet, da so Twig für Contao ausgelegt scheint.
    Jetzt habe ich gesucht, ob es denn für Contao ein Namespace gibt, dass mich auf den /files Ordner zugreifen lässt, allerdings habe ich diesbezüglich nichts gefunden.
    Von was ich gesehen habe scheinen alle Namespaces exklusiv für Template-Verzeichnisse zu sein.

    Hat Jemand einen Ratschlag wie ich das lösen kann?
    Ich suche nach einer eleganten Lösung die pur auf Template-Dateien basiert, damit ich die ganz einfach wiederverwenden kann für andere Projekte.
    Höre mir aber auch gerne andere Ideen an!

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Zitat Zitat von Baddy Beitrag anzeigen
    In den Beispielen die ich gesehen habe hat source() ohne Probleme für .svg-Dateien funktioniert.
    Poste einen Link zu den Beispielen.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer Avatar von Baddy
    Registriert seit
    29.08.2019.
    Beiträge
    26

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Poste einen Link zu den Beispielen.
    https://stackoverflow.com/questions/...om-an-svg-file

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Poste einen Link direkt zur Answer, die du benutzt hast.
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer Avatar von Baddy
    Registriert seit
    29.08.2019.
    Beiträge
    26

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Poste einen Link direkt zur Answer, die du benutzt hast.
    Gleicher Thread wie Link oben, die erste Antwort:
    https://stackoverflow.com/a/43204578/21455021


    One way of doing this:

    Code:
    {{ source('my.svg') }}
    Read more here: https://www.theodo.fr/blog/2017/01/i...es-using-twig/
    Geändert von Baddy (10.07.2023 um 16:01 Uhr)

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Du willst also einfach nur
    Code:
    {{ source('my.svg') }}
    nutzen? Gedacht ist diese Funktion für Template-Dateien - siehe https://twig.symfony.com/doc/2.x/functions/source.html
    Damit können also nur die Dateien gefunden werden, die über den Template Loader gefunden werden können.
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer Avatar von Baddy
    Registriert seit
    29.08.2019.
    Beiträge
    26

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du willst also einfach nur
    Code:
    {{ source('my.svg') }}
    nutzen? Gedacht ist diese Funktion für Template-Dateien - siehe https://twig.symfony.com/doc/2.x/functions/source.html
    Damit können also nur die Dateien gefunden werden, die über den Template Loader gefunden werden können.
    Nicht ganz. Ich will eine .svg-Datei aus dem /files Verzeichnis als inline-SVG ausgeben.
    Als Lösungsvorschlag dafür wurde {{ source('my.svg') }} angegeben, welches in Contao nicht ohne Weiteres funktioniert.
    Wenn es eine elegantere und/oder mehr geeignete Lösung gibt, dann würde ich Diese bevorzugen.

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Zitat Zitat von Baddy Beitrag anzeigen
    welches in Contao nicht ohne Weiteres funktioniert.
    Mit Contao selbst hat das nichts zu tun. Das ist generell in Symfony so. Du müsstest den gesamten /files Ordner zu den twig.paths hinzufügen - was aber keine gute Idee ist, da dann alle Dateien in /files im Twig Cache landen würden.
    » sponsor me via GitHub or PayPal or Revolut

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Zitat Zitat von Baddy Beitrag anzeigen
    Wenn es eine elegantere und/oder mehr geeignete Lösung gibt, dann würde ich Diese bevorzugen.
    Du könntest eine eigene Twig Extension implementieren, die das machst, was du brauchst (im Endeffekt einfach nur ein file_get_contents).
    » sponsor me via GitHub or PayPal or Revolut

  10. #10
    Contao-Nutzer Avatar von Baddy
    Registriert seit
    29.08.2019.
    Beiträge
    26

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Mit Contao selbst hat das nichts zu tun. Das ist generell in Symfony so. Du müsstest den gesamten /files Ordner zu den twig.paths hinzufügen - was aber keine gute Idee ist, da dann alle Dateien in /files im Twig Cache landen würden.
    Ja, ist immernoch Alles ein bisschen viel für mich durchzuschauen, wie was wo jetzt zusammenhängt.
    Aber so langsam steig ich da durch :^)

    Zusätzliche twigs.path Dateien anlegen würde ich sowieso bevorzugen zu vermeiden.
    Und ja, das klingt sehr ineffizient.

  11. #11
    Contao-Nutzer Avatar von Baddy
    Registriert seit
    29.08.2019.
    Beiträge
    26

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du könntest eine eigene Twig Extension implementieren, die das machst, was du brauchst (im Endeffekt einfach nur ein file_get_contents).
    Vielen Dank für den Vorschlag, Spooky!
    Ich werde das nachher mal 'nen Dreh geben.
    Werde mich dann mit Ergebnissen zurückmelden.
    Vielen Dank! ^^

  12. #12
    Contao-Nutzer Avatar von Baddy
    Registriert seit
    29.08.2019.
    Beiträge
    26

    Standard

    Kurzes Update für Lurker:
    Ich bin noch nicht dazu gekommen, momentan wurde das zurückgestellt, da andere Projekte reinkamen, die zur Zeit Vorrang haben.

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Der Vollständigkeit halber: man könnte zusätzliche Pfade über Namespaces so registrieren: https://symfony.com/doc/5.4/template...ate-namespaces
    Code:
    twig:
        paths:
            'files/theme/images/svgs': 'svg'
    Code:
    {{ source('@svg/some-svg.svg') }}
    Aber Vorsicht: in diesem Ordner sollten sich dann nur SVGs befinden - und auch idealerweise nur solche, die man über Templates direkt einbinden will.
    » sponsor me via GitHub or PayPal or Revolut

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •