Ankündigung

Einklappen
Keine Ankündigung bisher.

Templates - Syntax und Eigenschaften

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Zitat von xm22 Beitrag anzeigen
    jspit ah ok - Ich glaube, ich habe es jetzt verstanden. Ob man das jetzt Template Engine oder Template System nennen möchte sei mal dahin gestellt.

    Allerding finde ich diese Konstruktion aus meiner Erfahrung heraus super umständlich. Und Du hast gegenüber einer reinen Template Engine rein gar nichts gewonnen. Du hast lediglich View-Logik auslagerst. Vielleicht übersehe ich etwas Grundlegendes, aber anhand Deines Beispieles sehe ich keine Vereinfachung oder Einsparung, sondern gesteigerte Komplexität.
    Nennt man das nicht auch das View Helper Pattern? Ich meine mich zu erinnern, das es etwas ähnliches in Magento gibt, wo man die Template Blöcke über eine XML Datei konfiguriert und zusammenbaut und dann zu jedem Template ein ViewHelper gibt, welcher die Logik beinhaltet.

    Kommentar


    • #17
      Zitat von xm22 Beitrag anzeigen
      jspit Ob man das jetzt Template Engine oder Template System nennen möchte sei mal dahin gestellt.
      Nun für das Kind einen neuen Namen zu erfinden wollte ich auch nicht. Ist ja auch nicht wirklich etwas neues was ich da treibe.

      Zitat von xm22 Beitrag anzeigen
      jspit
      Allerding finde ich diese Konstruktion aus meiner Erfahrung heraus super umständlich. Und Du hast gegenüber einer reinen Template Engine rein gar nichts gewonnen.
      Kann ich nicht beurteilen ob dieser Anwendungsfall z.B. mit twig weniger umständlich aussehen würde.
      Diese Klasse soll mein altes TinyTemplate mal ersetzen. Das dort integrierte Caching ist überflüssig (PHP 7 ist schnell genug) und auch die Templatesektionen habe ich nie gebraucht.
      Neu gegenüber TinyTemplate ist die Möglichkeit des Zugriffs auf Arrays/Objekte und die Filter/Funktionen.


      Zitat von xm22 Beitrag anzeigen
      jspit Du hast lediglich View-Logik auslagerst. Vielleicht übersehe ich etwas Grundlegendes, aber anhand Deines Beispieles sehe ich keine Vereinfachung oder Einsparung, sondern gesteigerte Komplexität.
      Ist mir klar das der Aufwand auf PHP-Seite etwas höher ist. Die (meine) Templates sind ja fast reines HTML und enthalten weder Code noch Anweisungen wie extends oder include die wieder Abhängigkeiten erzeugen.
      Wenn ich konsequent mit Defaultwerten arbeite kann ich die Templates sogar schon ohne ein assign validieren.
      Wie schon gesagt habe ich nicht das Ziel ein Templatesystem zu schaffen was mehr kann als die gängigen. Ich brauche das hauptsächlich für Formulare um das ganze HTML von meinem PHP-Code fernzuhalten.
      Wo es bei den Formularen dynamisch wird z.B. bei den Auswahllisten (Select) kommen wieder Generatoren zum Einsatz die einem Platzhalter einfach zugewiesen werden.
      So eine index.tpl.html existiert auch nur hier und in der Masse meiner Applikationen nicht. Auch dafür habe ich auch einen Generator.





      PHP-Klassen auf github

      Kommentar


      • #18
        Zitat von jspit Beitrag anzeigen
        Es soll ein primitives Affenformular erzeugt werden, das bei Eingabe eines Datums und einer Anzahl Tage das Enddatum berechnet.
        Ich denke mal das könnte so ähnlich auch mit Twig laufen.
        Genau das habe ich jetzt mal unter W10 probiert . Die Templates konnte ich ohne Änderungen aus #14 übernehmen. Der PHP Code sieht für die Ausgabe mit Twig jetzt so aus:
        PHP-Code:
        //Ausgabe

        $twigLoader = new FilesystemLoader(__DIR__.'/../templates');
        // Instantiate our Twig
        $twig = new Environment($twigLoader);

        $assignForm = [
            
        'post' => $formVal
            
        'enddate' => $endDate
        ];

        $tplform $twig->render('form_date.tpl.html',$assignForm);

        $assignIndex = [
            
        'title' => 'first twig test',
            
        'formular' => $tplform
        ];

        $htmlMain $twig->render('index.tpl.html'$assignIndex );

        echo 
        $htmlMain
        Zusätzlich wird ein Autoloader benötigt. Wenn Twig per Composer installiert wird sollte dieser auch benutzt werden. Bin positiv überrascht, das beide Varianten ein absolut identisches Verhalten zeigen.
        So wird z:b: auch unter twig ein DateTime-Objekt vom Filter date richtig erkannt und verarbeitet
        Als nächsten Schritt werde ich das mal auf einen Raspi versuchen und die Ergebnisse dann vergleichen.

        PHP-Klassen auf github

        Kommentar


        • #19
          Hm... Aber könntest Du nicht direkt in Deinem Twig-Template auf das Form-Template referenzieren, ohne wie hier den Umweg über diese PHP-Date zu gehen? Wenn ich Deinen Code richtig interpretiere, benötigst Du dieses Stück Code wieder und wieder. Da würde eine generische Lösung doch eh mehr Sinn machen.


          Noch eine andere Frage, vielleicht habe ich es einfach nicht begriffen: Was ist die Stoßrichtung dieses Threads? Wolltest Du jetzt was zeigen oder was wissen oder was diskutieren?

          Kommentar


          • #20
            Stoßrichtung: 60% was wissen (über Twig), 30% diskutieren + 10%zeigen.

            Im Twig-Template kann ich wahrscheinlich auch das Form-Template referenzieren. Da hat Twig sicher nicht nur eine Möglichkeit. In meinem Template gibt es nichts dafür. Hab da für Twig was von include gelesen. Die Wirkung dürfte so sein wie bei PHP. Welche Möglichkeiten gibt es noch (Stichpunkte reichen mir) ?

            Was ich spare ist die eine Zeile mit $tplform. Die Platzhalter aus dem Form-Template muss ich dann ja auch füllen. Das bedeutet in der Praxis das $assignIndex wird entsprechend größer.
            Als großen Nachteil bei dieser Variante sehe ich das ich jetzt 2 Templates durschauen muss um zu sehen welche Platzhalter ich mit PHP füllen muss.

            Wie stelle ich es an wenn ich Form + Ergebnis nicht immer zusammen anzeigen möchte. Also Schritt 1 nur die Form und nach dem Ausfüllen nur das Ergebnis. Dann muss ich wohl im Twig-Template eine entsprechende Logik implementieren und die Daten als mehrdimensionales Array übergeben?

            Mir ist auch nicht klar wie folgendes bei Twig realisiert werden kann: Ich brauche das form_date.tpl.html jetzt zwei mal im Main-Template für ein Start- und ein Enddatum. Ein zweimaliges include dürfte ausfallen. Ich muss ja die beiden (Sub)Templates mit unterschiedlichen Werten füllen.

            Vermutlich habe ich fast alles was Twig betrifft einfach noch nicht begriffen.
            PHP-Klassen auf github

            Kommentar


            • #21
              Am besten gliederst du deine Twig Templates mit Blöcken. Diese Blöcke kannst du auch einzeln überschreiben oder auch einzeln mit Use in andere Templates importieren.
              Es gibt auch so genannte Macros, womit du wiederkehrende Element automatisieren kannst. Weiter solltest du auch gebraucht vom erweitern von Templates machen.

              macro - Documentation - Twig - The flexible, fast, and secure PHP template engine (symfony.com)
              block - Documentation - Twig - The flexible, fast, and secure PHP template engine (symfony.com)
              use - Documentation - Twig - The flexible, fast, and secure PHP template engine (symfony.com)
              extends - Documentation - Twig - The flexible, fast, and secure PHP template engine (symfony.com)

              Kommentar


              • #22
                Ich glaube mit macros lässt sich ganz gut mit Twig umsetzen was ich oft brauche. Sehr hilfreich zum experimentieren finde ich dieses Twig-Fiddle. Habe da mal ein Beispiel für ein Macro reingestellt.
                Werde meine Templateklasse aber erstmal auf den jetzigen Stand belassen und damit arbeiten. Bei Bedarf kann ich dann immer noch wechseln. Bedingt ist das durch die Spezifik meiner Zielsysteme.

                PHP-Klassen auf github

                Kommentar

                Lädt...
                X