|
|||
Frage zur Realisierung eines Template Parser
Guten Abend.
Ich habe bisher immer ein PHP Templatesystem genutzt (selbst geschrieben), dass bei jedem Arbeitsdurchlauf die Templatedatei mit Subtemplates und anschließend Daten füllt. Das negative ist der heftige Einsatz von regulären Ausdrücken, was ja nicht unbedingt große Performance bietet. Ich bin nun dazu bereit, das ganze wie beispielsweise im phpBB3 zu regeln. Das Template wird geparsed und die Inhalte durch PHP-Anweisungen, wie echo class->methode(); eingeladen über eval(). Nun meine Frage: Wenn ich eine Forenseite parse, dann könnte da ja unter Umständen sowas stehen wie: Gib Usernamen XYZ aus. Nun würde die Methode den Namen abfragen und ein echo würde erfolgen. Aber bei 15 Einträgen, würden ja 15 DB Abfragen notwendig werden (abzüglich der, die mehrfache Einträge auf der Seite verfasst haben). Wie kann man soetwas möglichst effizient gestalten? Mir fehlt, ehrlich gesagt, die Idee. Einen schönen Abend Schelm.isch |
Sponsored Links |
Sponsored Links |
|
||||
Zitat:
2) Nicht jeder arbeitet nach dem MVC-Prinzip Bei mir sind Templates sehr oft Controller und View in einem, weil das Handlich für mich so einfacher ist. 3) ? @Schelm.isch: Würde etwas dagegen sprechen die User-Tabelle zu joinen und den Benutzernamen direkt zur Verfügung zu stellen? So nach dem Motto: Code:
SELECT t1.*, t2.username FROM forum_posts t1 LEFT JOIN users t2 ON t2.user_id = t1.user_id |
|
||||
Bei eval() sehe ich das Hauptproblem nicht in dem erhöhten Sicherheitsrisiko vor möglichen Injektionen, sondern im schlechten Programmstil, den man sich aneignet.
In der Regel gibt es für jedes Problem eine (viel) elegantere Lösung, die ohne eval() auskommt. Sonderausnahmen sind mir nicht bekannt. Zitat:
Templates stelle ich gerne den Designern zu verfügen, welche die Applikationen auf Hochglanz bringen. Und sie können glücklicherweise keinen (grossen) Unheil anrichten, da sie nicht mit der Controller-Logik in Berührung kommen. Bei der Anfrage: 'Gib Usernamen XYZ aus' interpretiere ich das 'XYZ' als einen hardcoded Namen. Die Anfrage müsste eher lauten: 'Gib mir den Usernamen des jeweiligen Beitrages aus'. Geändert von Curtains (27.09.2008 um 13:18 Uhr) |
|
||||
Zitat:
Vor Injektionen hab' ich mich abgesichert, muss ich aber nochmal checken, schlechten Stil hab' ich nicht. Zitat:
Mit meiner eigenen Template-Klasse schreibe ich mir meine Klassen (Models), die die Daten liefern und im Template werden die Daten angefordert, so nach dem Motto: Code:
<x_module module="Users" action="listUsers" var="{|users|}" /> <x_foreach array="{|users|}" item="{|user|}"> {|user:username|} </x_foreach> OK, dann haben wir das unterschiedlich verstanden. |
|
||||
Zitat:
Dies erinnert mich ein bisschen an XUL oder OpenLaszlo's Programmiersprache. Ich verfolge einen anderen Weg. Ich definiere die Applikation durch Objekte. Die Basis bildet die strikte Trennung von Controller, Model und View. Ausserdem habe ich eine Bibliothek, um Formulare und Formularelemente (Textfelder, Dropdowns, Datengitter, ..) zu definieren. Die Definition eines Formulars sieht beispielsweise so aus: PHP-Code:
PHP-Code:
p.s. Alle Formulare in meinen Applikationen werden mit Hilfe eines zentralen Formular-Templates in HTML-Code umgewandelt. In allen anderen Templates kommen nirgends input-Tags vor. Dadurch wird Rapid Prototyping sehr einfach Wie definierst du Formulare in deinen Templates? |
|
|||
Hey, danke für die Antworten erstmal.
Ich muss mal zurückrudern! Also ich komme ohne eval() aus, da ich aus dem Template eine PHP Datei parsen lasse und diese dann vorher definierte Werte nur noch ausgeben muss. Da muss ich mir nur über die Regex noch genauer Gedanken machen, denn ich möchte fehlerhafte Templates erkennen können. |
|
||||
Hallo Schelm.isch,
du könntest auch ganz auf Platzhalter verzichten und direkt PHP-Code nehmen Die Templates werden dadurch nur wenig unlesbarer, aber dafür braucht es keinen Regex-Parser mehr. Diese Forumsdiskussion könnte interessant für dich sein. |
|
|||
Hey.
Naja, der Vorteil am Parsen und Cachen liegt darin, dass ich was lernen kann und strikter zwischen PHP und HTMl trennen kann. Ich kann mich quasi dann frei aufs HTML / CSS konzentrieren und muss mir dabei keine Gedanken um das Befüllen machen. |
Sponsored Links |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Frage zu Template | gustavmega | CSS | 1 | 25.07.2009 13:52 |
Joomla Template - Seite zentrieren? | Dav1d | CSS | 15 | 02.02.2009 14:38 |
Frage zu einem Gedanken (DIV positionieren) | charlie | CSS | 1 | 06.09.2008 11:36 |
Wie dieses Template slicen damit man es mit CSS einbinden kann? | ChOpSueY! | CSS | 1 | 02.07.2008 21:47 |
Joomla Template Problem | tyrannski | CSS | 0 | 15.02.2007 15:06 |