![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Erfahrener Benutzer Registriert seit: 10.05.2006 Ort: Jevenstedt
Beiträge: 131
|
Moin, ich schreibe gerade ein bisschen an meiner Template-Klasse. Das Problem ist jetzt das ich bei der Verarbeitung von Bedingungnen nicht weiterkomme. Ich will folgendes: Die Template-Klasse soll gucken ob die angegebene Bedingung zutrifft oder nicht. Ich schaffe es problemlos die Blöcke herauszufiltern und die Bedingungen zu extrahieren, jedoch scheitere ich am verarbeiten. Ich möchte das man bedingungen genauso Komplex wie unter PHP schreiben kann. Also dachte ich mir ich benutzt eval um die Bedingung zu verarbeiten. Nun muss ich aber irgendwie überprüfen ob es sich um eine gültige Bedingung handelt damit man darüber nicht PHP Code in den Parser einschleußt. Nur wie Prüfe ich das? Mir ist zwar bereits der gedanke gekommen das ganze mit RegExp zu regeln aber ich glaube das das zu langsam ist. Ausserdem erhalte ich von eval false wenn der code nicht verarbeitet werden konnte. Wie unterscheide ich also ob das ergebniss der Bedingung oder des Interpreters false war? Gruß, Prophet
__________________ |
| | |
| | Nach oben #2 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
eval ist immer sehr gefährlich. Ansonsten sorgst du bei einer Templateklasse mit Kontrollstrukturenverarbeitung dafür, dass Design und Code wieder vermischt werden.
__________________ I did it my way - Senseless-Blog |
| | |
| | Nach oben #3 |
| Erfahrener Benutzer Registriert seit: 10.05.2006 Ort: Jevenstedt
Beiträge: 131
|
Ja aber wie soll ich sonst komplexe bedingungen verarbeiten? And und or würde ja noch über das verschachteln oder stellen zweier getrennnter bedingungen gehen aber der rest?
__________________ |
| | |
| | Nach oben #6 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 685
|
Ich bin ebenso wie Warren der Meinung, dass du die Bedingungen lieber in deinen Quelltext packen solltest, anstatt dies als Feature in deine Template-Engine einzubauen. Aber wenn du es unbedingt machen willst, dann brauchst du eigentlich nur sicherstellen, dass niemand die Templates verändern kann und nur Inhalte aus dem Template in dsa eval() gelangen können, dann brauchst du auch nichts filtern, da du selber die Templates editierst. Ich würde es dennoch eher mit RegEx versuchen, wenn es denn schon irgendwie sein muss. Aber: Dass du die Geschwindigkeit als Ausschlaggebend für die Bedingung angibst, so kann ich dir nur sagen: Es wird wohl kaum schneller sein, die Bedingung erst extrahieren, dann überprüfen und dann ausführen lassen zu müssen, als sie direkt in PHP zu schreiben und damit eine strikte Trennung zwischen Code und Layout zu haben.
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #7 | |
| Gast
Beiträge: n/a
| Zitat:
Wenn du schreibst If ({templateVar1} !== {templateVar2} || ... ) { } Muss {..} halt sauber sein. | |
|
| | Nach oben #9 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Einfaches Beispiel (sicher nicht die eleganteste Lösung) PHP-Code:
__________________ I did it my way - Senseless-Blog |
| | |
| | Nach oben #10 | |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
| Zitat:
Bei meiner TEmplate klasse habe ich eine, naja Art "caching" eingebaut. Bei jeder Veränderung wird das TEmplate immer in die Klasse geschrieben, und zwar in ein Array (aTemplates[$sTemplatename]), wo sich dann der Inhalt des Templates befindet. Lade ich ein neues Template so geht mir mein bisheriges nicht verloren. Will ich das alte wieder haben, wird zuerst geprüft ob es im Cache existiert - wenn ja, wird das wieder geholt - wenn nein aus dem Dateisystem geladen (außer ich hab es nicht explizit anders angegeben). Beispiel: PHP-Code:
__________________ http://www.ChrisDiary.De | |
| | |
| | Nach oben #11 |
| Erfahrener Benutzer Registriert seit: 10.05.2006 Ort: Jevenstedt
Beiträge: 131
|
Was hat das mit einer Bedingung zu tun? ICh hatte vor das in etwa so zu realisieren: Template: HTML-Code: <!--[if:index==3]--><span>Der Index Ist 3!</span><!--[/endif]-->
__________________ |
| | |
| | Nach oben #12 | |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Dann zeig uns dochmal etwas Code. Zitat:
__________________ http://www.ChrisDiary.De | |
| | |
| | Nach oben #15 |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.203
|
vieleicht extrem umständlich, wahrscheinlich auch sehr unperformante und nur auf nem rooty einsetzbar wo man sich sein php selbst zusammenstellen kann: http://www.php.net/Runkit_Sandbox damit könnte man nem exit oder ähnlichem ausweichen indem man vieleicht überprüft ob das script noch läuft, aber ich würde an deiner stelle auf php-code verzichten, lieber auf variablen-vergleiche und ähnliches begrenzt lassen und vieleicht die absolut nötigen dinge die du brauchst, selbst implementieren, sprich über reguläre ausdrucke z.b. in ifs sachen wie strtolower (ist jetzt nur ein beispiel) erkennen lassen und via preg_replace_callback ersetzen lassen und das dann zurückgeben und dann den vergleich machen. /edit btw, wenn jemand exit ins template bekommt, hat er ja wohl auch schon zugang zum php-script selbst oder willst du wild fremde leute templates basteln lassen ? mfg robo47 |
| | |
| | Nach oben #16 |
| Erfahrener Benutzer Registriert seit: 10.05.2006 Ort: Jevenstedt
Beiträge: 131
|
Ich habe mir noch einmal gedanken gemacht und folgende funktion geschrieben: PHP-Code: Bei den verglichenen werten sollte überprüft werden ob sie als registrierte variable exsistieren oder nicht. Wenn ja soll der wert der variablen für den vergleich verwendet werden, anderenfall der entsprechende wert. Wurde kein vergleich angestellt (keiner der operatoren benututz) so wird geprüft ob eine bool'sche variable registriert wird. Wenn wird dessen wert zurückgegeben. Scheitert es irgendwo oder kommt es zu einem undefinierten ergebnis wird in jedem fall false zurückgegeben. Ich habe die funktion jetzt mit einigen bedingungen getestet und erhalte immer False. Es muss also ein logischer fehler vorliegen. Könnt ihr mit bei der suche des fehlers helfen? Ist die Funktion ansonsten gut? Glaubt ihr sie ist in hinsicht auf die performance akzeptabel? // EDIT: Das ich den Quelltext komplett in englisch schreibe ist eine angewohnheit von mir
__________________ |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Generierung der Inhalte durch das Template | dago | Gesuche | 5 | 11.06.2007 13:20 |
| Schleifen in einem Template verarbeiten | Prophet | PHP-Programmierung | 11 | 10.09.2006 19:16 |
| Kleine Fragen zur IT[X] Template Engine | ex³ | PEAR, PECL und Frameworks | 0 | 18.07.2006 14:00 |
| Kleines Prob mit phpBB Template System | Garnele | PEAR, PECL und Frameworks | 6 | 22.10.2005 00:31 |