Zitat von xm22
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Templates - Syntax und Eigenschaften
Einklappen
Neue Werbung 2019
Einklappen
X
-
Zitat von xm22 Beitrag anzeigenjspit Ob man das jetzt Template Engine oder Template System nennen möchte sei mal dahin gestellt.
Zitat von xm22 Beitrag anzeigenjspit
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.
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 anzeigenjspit 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.
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
-
Zitat von jspit Beitrag anzeigenEs 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.
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;
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
-
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
-
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
-
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
-
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
Kommentar