PHP-templating mit str_replace?
Ich denke, das Grundprinzip des PHP-templating-system ist eine Zeichenfolge ersetzen, richtig?
So kann ich, nur einen string um meine html-template-code wie
$str_template = "<html><head><title>{the_title}</title><body>{the_content}</body></html>"
und in den folgenden code einfach ein str_replace schieben die Daten in mein template-Variablen wie
str_replace( $str_template, '{the_title}', $some_runtime_generated_title );
str_replace( $str_template, '{the_content}', $some_runtime_generated_content );
dann endlich
echo $str_template;
Wird dies hoffentlich machen die ganze variable übergeben Prozess ein bisschen schneller? Ich weiß, dies könnte eine seltsame Frage, aber hat jemand es versucht?
InformationsquelleAutor Shawn | 2009-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass ist in der Regel die grundlegende Idee für ein Template system. Echte Template-Systeme haben viel mehr Fähigkeiten, aber im Kern das ist, was Sie tun.
Euch Fragen ob das "die ganze variable übergeben Prozess ein bisschen schneller". Schneller als was? Sie läuft in performance-Probleme mit etwas, was Sie jetzt gerade tun?
Mit Smarty wird wahrscheinlich effizienter sein, als das, was Sie vorgeschlagen haben. Bedenken Sie, dass jeder Aufruf von str_replace(), einmal für jede variable zu ersetzen, wird die gesamte Zeichenfolge Vorlage gescannt werden muss, um zu suchen, geschweifte Klammern zu ersetzen. Smarty wird, dass Sie den Betrieb effizienter zu gestalten.
Ach ja, eine weitere Schwierigkeit mit dem einfachen string zu ersetzen ist, was passiert, wenn Ihr $some_runtime_generated_title enthält etwas, das aussieht wie eine variable Ersatz, wie "wo kommt {the_content} gehen?" Der nächste Ersatz für {the_content} falsch ersetzen, die in den Titel zu.
smarty liest die template-einmal zum generieren von php-code. der php-code ausgeführt wird dann für jede Anforderung
InformationsquelleAutor Greg Hewgill
Ja, das ist die grundlegende Idee hinter einem templating system. Man könnte weiter Abstrakt, lassen Sie uns eine andere Methode fügen Sie die Klammern zum Beispiel.
Könnte man auch arrays verwenden mit str_replace und so viele mehr ersetzt mit einer Funktion rufen Sie wie dieser
Dem system arbeite ich mit ist Löffel-Bibliothek, deren templating-system ist ziemlich solide, einschließlich der Vorlagen zusammengestellt, die einen enormen performance-Gewinn.
Arrays sind sehr schön in dieser Funktion. Wie bei smarty, so ziemlich alles wird eine schnellere und bessere option.
InformationsquelleAutor Javache
Ich würde einen parser bauen, der bricht den code in es-Token (Variablen und text). Als eine einfache Ansatz, könnten Sie mit den
pre_split
Funktion, um dies zu tun:Nun können Sie Durchlaufen die Token und prüfen, ob es eine variable oder text:
Der Vorteil dieses Ansatzes ist, dass die Variablen nicht ersetzt in dem text, der bereits ersetzt worden. Also:
Hier der text würde ersetzt werden durch
Lorem bar {bar} sit amet …
und nichtLorem bar bar sit amet …
wie es passieren würde, mit Ihrem code, wenn{bar}
ersetzt wird nach{foo}
.InformationsquelleAutor Gumbo
Ist es eine gute Idee ist die Verwendung einer template-engine.
Aber Ihre Idee wird langsam, wenn der html-Code wird größer und langsamer werden wenn Sie brauchen, sind mehr Variablen. denken Sie daran das ersetzen ausgeführt wird, für jede Anforderung.
können Sie html-Dateien mit php-tags für die Ausgabe (wie
<?=$var?>
) und Schleifen nur.gehören Sie via "include", um Ihre php-code.
das ist viel schneller.
werfen Sie einen Blick auf smarty. dies ist mein Lieblings-template-engine für php.
smarty hat viele gute features wie caching und es ist erweiterbar durch plugins.
wenn Sie Deutsch verstehen ein Blick hier. es gibt eine kleine Einführung in die smarty.
InformationsquelleAutor Bernd Ott
Sicher, Sie müssen die Argumente in der richtigen Reihenfolge, aber.
str_replace()
Könnte auch eine gute Idee, um die Vorlagen in Ihrer eigenen Datei, anstatt Sie zu halten, Sie in einen string. Dann Lesen Sie nur diese über
file_get_contents()
oder ähnliches.InformationsquelleAutor matpie
Wenn Sie nur das tun, variable expansion, die Sie tun können:
Wird es so gut funktionieren...
Einige Menschen Fragen sich, warum gibt es template-system, bei PHP ist bereits ein template-system...
Natürlich, es gibt andere Vorteile dieser Systeme, wie sicherer Zugang zu den Variablen, vielleicht einfacher zu handhaben, die von Designern (oder generieren durch tools), Einschränkung der Logik in der view-Schicht... Das ist eine Allgemeine Kritik von schweren template-Systeme wie Smarty, mit so viel Logik, dass man fast schreiben ein weiteres template-system! 😉
Einige template-Systeme, wie Savant, nimmt einen Mittelweg. 🙂
InformationsquelleAutor PhiLho
Kann man einfach nicht machen Sie eine Vorlage auf diese Weise.
Eine real-life-Vorlage erfordert nicht nur einfacher Variablen zu füllen, sondern auch verschiedene Kontrollstrukturen, oder zumindest irgendeine Art von Blöcken, um die Kontrolle von bestimmten Bereichen der Seite (um ein Schleifen z.B.).
So können Sie nicht stellen Sie eine Vorlage mit str_replace nur. Einige regexps und anspruchsvolle Analyse zu müssen.
So, es ist besser, stick mit einer template-engine, die bereits zur Verfügung - eine PHP selbst!
InformationsquelleAutor Your Common Sense
Eigentlich ist die Antwort von "Ihren gesunden Menschenverstand", ist richtig. Könnten Sie PHP verwenden, um die aktuelle Kontext-und ersetzen-Variablen. Statt zu schreiben die Ausgabe, die Sie tun könnten, ob_start (), um es zu halten in einem Puffer und Holen Sie sich die ausgetauschten Inhalte. Einfach und elegant!
InformationsquelleAutor Rajkumar Madhuram
im Grunde die Idee ist, dass man, aber die Vorlage etwas, das bietet viel mehr, zum Beispiel RainTPL ist WYSIWYG, weil es zu ersetzen relative Pfade in der Vorlage der server-Pfade, die auf diese Weise gestalten Sie Ihre Vorlage in lokale und es klappt auf dem server, ohne sich ändern muss img/css.
InformationsquelleAutor RainElemental