Das Contao Camp 2020 in Hamburg. LEIDER ABGESAGT!
Ergebnis 1 bis 30 von 30

Thema: Twig Templates

  1. #1
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard Twig Templates

    contentelement.PNG

    Ich möchte als template für mein ContentElement den Quellcode in Twig schreiben. Jedoch sobald ich im Controller das template auf siehe Screenshot ändere, wird das template nicht gefunden. (loremipsum.html5 findet er jedoch).

    Wie kann ich mit twig arbeiten bzw. die Template richtig rendern lassen?

    Controller Path: src/Controller/ContentElement/MyContentElementController.php
    Template Path: templates/ce_twig.html5.twig

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Das Template, das du in der Annotation angibst, ist das Template, dass dir in der getResponse Methode übergeben wird, also kein Twig Template, sondern ein Contao FrontendTemplate. Wenn du ein Twig Template verwenden möchtest, musst du das selbst instanzieren.

  3. #3
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Das Template, das du in der Annotation angibst, ist das Template, dass dir in der getResponse Methode übergeben wird, also kein Twig Template, sondern ein Contao FrontendTemplate. Wenn du ein Twig Template verwenden möchtest, musst du das selbst instanzieren.
    Kannst du ein Beispiel geben zum Twig Template instanzieren?
    Geändert von JLN (10.03.2020 um 15:45 Uhr)

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Also eigentlich meinte ich rendern. Funktioniert grundsätzlich genau so wie man es bei normalen Route Actions machen würde. zB.:
    PHP-Code:
    // src/Controller/ContentElement/MyContentElementController.php
    namespace App\Controller\ContentElement;

    use 
    Contao\ContentModel;
    use 
    Contao\CoreBundle\Controller\ContentElement\AbstractContentElementController;
    use 
    Contao\CoreBundle\ServiceAnnotation\ContentElement;
    use 
    Contao\Template;
    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;
    use 
    Twig\Environment;

    /**
     * @ContentElement(category="texts")
     */
    class MyContentElementController extends AbstractContentElementController
    {
        private 
    $twig;

        public function 
    __construct(Environment $twig)
        {
            
    $this->twig $twig;
        }

        protected function 
    getResponse(Template $templateContentModel $modelRequest $request): ?Response
        
    {
            return new 
    Response($this->twig->render(
                
    'my_content_element.html.twig',
                
    $model->row()
            ));
        }

    Code:
    {# templates/my_content_element.html.twig #}
    Hello {{type}}!
    Ausgabe im Frontend:
    Hello my_content_element!
    Geändert von Spooky (10.03.2020 um 15:41 Uhr)

  5. #5
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Danke erstmal für die ausführliche und verständliche Antwort!

    Und woran liegt es, dass ich mein erstelltes ContentElement nur sehe, wenn ich mich im Debug Modus befinde?

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von JLN Beitrag anzeigen
    Und woran liegt es, dass ich mein erstelltes ContentElement nur sehe, wenn ich mich im Debug Modus befinde?
    Wenn du die Konfiguration änderst - darunter fällt auch das Ändern des DCAs oder das registrieren/hinzufügen neuer Inhaltselemente etc. - musst du in der Produktionsumgebung auch den Cache neu aufbauen lassen. Im Debug-Modus nicht.

  7. #7
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wenn du die Konfiguration änderst - darunter fällt auch das Ändern des DCAs oder das registrieren/hinzufügen neuer Inhaltselemente etc. - musst du in der Produktionsumgebung auch den Cache neu aufbauen lassen. Im Debug-Modus nicht.
    Wie lässt der Cache sich denn neu aufbauen?

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Auf der Konsole zB.:
    Code:
    vendor/bin/contao-console cache:clear --no-warmup
    vendor/bin/contao-console cache:warmup

  9. #9
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Auf der Konsole zB.:
    Code:
    vendor/bin/contao-console cache:clear --no-warmup
    vendor/bin/contao-console cache:warmup
    Funktioniert leider nicht. Woran kann es liegen?

    va.PNG

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Entferne das "php " vorne. Du kannst auch einfach ein composer install ausführen. Aber da du sowieso lokal bist: da brauchst du das ja nur zum überprüfen am Schluss, ob alles auch in der Produktionsumgebung funktioniert. Entwickeln tust du ja in der dev Umgebung, also im Debug-Modus, über die .env.local.
    Geändert von Spooky (11.03.2020 um 08:37 Uhr)

  11. #11
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Entferne das "php " vorne.
    Danke!

  12. #12
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Entferne das "php " vorne. Du kannst auch einfach ein composer install ausführen. Aber da du sowieso lokal bist: da brauchst du das ja nur zum überprüfen am Schluss, ob alles auch in der Produktionsumgebung funktioniert. Entwickeln tust du ja in der dev Umgebung, also im Debug-Modus, über die .env.local.
    Hab jetzt den Symfony Controller erstellt, der mein gewünschtes Twig Template rendert. Soweit so gut, danke nochmal dafür! Wie kann ich im Backend jedoch nun festlegen welche Felder (Headline, Image, ...) dargestellt werden sobald ich mein neues Element ausgewählt habe?

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

  14. #14
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Ich verstehe nicht, wie der Symfony Controller die palette bekommt. Muss ich das in den Annotations angeben?

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Der Name der Palette = der Typ des Inhaltselements. Der Typ des Inhaltselements wird entweder automatisch aus dem Klassennamen ermittelt (siehe Dokumentation) - oder du legst ihn über die Annotation selbst fest.

  16. #16
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Der Name der Palette = der Typ des Inhaltselements. Der Typ des Inhaltselements wird entweder automatisch aus dem Klassennamen ermittelt (siehe Dokumentation) - oder du legst ihn über die Annotation selbst fest.
    Code:
    $GLOBALS['TL_DCA']['tl_test'] = [
        'palettes' => [
            'default' => '{title_legend},title,alias,addImage',
        ],
    ];
    test = der festgelegte Name von mir (wird auch so im Contao Backend angezeigt!)
    Ändert jedoch leider nichts..

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Halte dich doch an das Beispiel in der Dokumentation: https://docs.contao.org/dev/framewor...ments/#example

  18. #18
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Halte dich doch an das Beispiel in der Dokumentation: https://docs.contao.org/dev/framewor...ments/#example
    test.PNG
    test2.PNG

    Muss die Datei im dca-Ordner nen bestimmten Namen haben?

  19. #19
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Steht in der Dokumentation: https://docs.contao.org/dev/framewor...ments/#example
    PHP-Code:
    // contao/dca/tl_content.php 

  20. #20
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Steht in der Dokumentation: https://docs.contao.org/dev/framewor...ments/#example
    PHP-Code:
    // contao/dca/tl_content.php 
    So habe ich es auch übernommen, ändert jedoch nichts

  21. #21
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Wenn du dich im Debug-Modus befindest, musst du, bei neu hinzugefügten Dateien, auch den Cache löschen. zB einfach manuell den Ordner var/cache löschen.

  22. #22
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wenn du dich im Debug-Modus befindest, musst du, bei neu hinzugefügten Dateien, auch den Cache löschen. zB einfach manuell den Ordner var/cache löschen.
    Ich hab mal $GLOBALS['TL_DCA'] ge-dump'ed und in tl_content -> palettes hineingeschaut, jedoch taucht dort mein Eintrag nicht auf.

  23. #23
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Poste mal deinen gesamten bisherigen Code, mit Angabe wo sich die jeweilige Datei befindet, relativ zum Installationsverzeichnis der Contao Installation.

  24. #24
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Poste mal deinen gesamten bisherigen Code, mit Angabe wo sich die jeweilige Datei befindet, relativ zum Installationsverzeichnis der Contao Installation.


    src/Controller/ContentElement/MyContentElementController.php
    PHP-Code:
    <?php


    namespace App\Controller\ContentElement;

    use 
    Contao\ContentModel;
    use 
    Contao\CoreBundle\Controller\ContentElement\AbstractContentElementController;
    use 
    Contao\CoreBundle\ServiceAnnotation\ContentElement;
    use 
    Contao\Template;
    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;
    use 
    Twig\Environment;

    /**
     * @ContentElement(
     *     "test",
     *     category="Symfony")
     */
    class MyContentElementController extends AbstractContentElementController
    {

        protected function 
    getResponse(Template $templateContentModel $modelRequest $request): ?Response
        
    {

            
    dump($GLOBALS['TL_DCA']);
            
    $template->text $model->text;

            return 
    $template->getResponse();
        }
    }
    dca/tl_content
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['palettes']['test'] = 
        
    '{type_legend},type;{text_legend},text'

    templates/ce_test.html5 (Warum muss es eig. html5 sein?)
    Code:
    <h5>Hello World</h5>
    Backend -> leer
    leer.PNG

  25. #25
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von JLN Beitrag anzeigen
    dca/tl_content
    Der Pfad dieser Datei muss contao/dca/tl_content.php sein.

  26. #26
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Der Pfad dieser Datei muss contao/dca/tl_content.php sein.
    Ok das wars. Danke!

  27. #27
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Gehen wir nun davon aus, dass ich kein Twig Template rendern möchte, sondern ein normales HTML5-Template (warum genau eig. HTML5 und nicht nur html?)

    In Twig

    Code:
     return new Response($this->twig->render(
                'ce_twig.html.twig',
                ['model' => $model->row()]
            ));
    und dann im Twig-Template um den Text (eingegeben im Backend) auszugeben

    Code:
    {{ model.text }}

    Wie kann ich das für eine HTML5 Datei umsetzen?

  28. #28
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von JLN Beitrag anzeigen
    Gehen wir nun davon aus, dass ich kein Twig Template rendern möchte, sondern ein normales HTML5-Template (warum genau eig. HTML5 und nicht nur html?)
    Ist halt so . Historisch war es so, dass Contao früher XHTML & HTML5 ausgeben konnte. Daher gab es auch je nach dem ein Template für XHTML und ein Template für HTML5. Und das wurde über die Dateiextension unterschieden. Heute wird nur mehr HTML5 unterstützt. Die Anforderung, dass die Templates genau so heißen müssen ist aufgrund der Rückwärtskompatibilität aber geblieben.



    Zitat Zitat von JLN Beitrag anzeigen
    Wie kann ich das für eine HTML5 Datei umsetzen?
    zB
    PHP-Code:
    <?= $this->text ?>
    Siehe auch https://docs.contao.org/dev/framework/templates/

  29. #29
    Contao-Nutzer
    Registriert seit
    09.03.2020.
    Beiträge
    32

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    zB
    PHP-Code:
    <?= $this->text ?>
    Siehe auch https://docs.contao.org/dev/framework/templates/
    Ah ich hatte

    HTML-Code:
    <?php $this->text ?>
    Worin liegt dort der Unterschied zwischen dem "<?php" und "<?=" ?

  30. #30
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Vienna, Austria
    Beiträge
    23.098
    Partner-ID
    10107
    User beschenken
    Wunschliste

    Standard

    <?= ... ?> ist die Kurzform von <?php echo ... ?>.

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
  •