FastTemplate Problem
Carl
- php
Hi
ich hab das Problem, dass ich zwar verschiedene templates definiert und geparsed hab, aber wenn ich dann das php-script aufrufe, wird mir nur dieses template angezeigt, die templates, die es enthält nicht.
Kann mir jemand sagen, was ich da falsch mache?
Hallo, Carl,
ich hab das Problem, dass ich zwar verschiedene templates definiert und geparsed hab,
Was verstehst du unter Templates? Was heißt das, "Templates definiert"? Wie machst du das? Was meinst du mit "du hast sie geparst"?
aber wenn ich dann das php-script aufrufe,
Welches Script? Wie aufrufen? (Vermutlich CGI, ja. :))
wird mir nur dieses template angezeigt,
Was heißt das? Was wird wo und wie angezeigt? Der Quellcode? Den Output, den das Script generiert?
die templates, die es enthält nicht.
Was bedeutet "enthalten"? Was sollen die Templates bewirken, Hypertext ausgeben? Bindest du andere Scripts ("Templates"?) mit include() oder require() ein?
Kann mir jemand sagen, was ich da falsch mache?
Ja; du hast eine unpräzise Frage gestellt. Leider kann dir niemand helfen, wenn du uns nichts genaueres mitteilst.
Argh! Was ist denn da los? Ein Frameset, das text/plain-Dateien (welche unvollständige HTML-Dokumente sind) einbindet...!?! Was hat das für einen Sinn?
Grüße,
Mathias
templates sind eine art html dateien, allerdings benutzt du nicht den vollständigen code. das ziel ist es php-code von design zu trennen.
über einen php-befehl verbindet man die template datei mit einer variable. dann definiert man über den fastprint-befehl die seite, die vom script aufgerufen wird. und eigentlich sollten dann anstatt der variablen, die du vorher mit den template-files verbunden hast die template-dateien selber angezeigt werden. Dadurch kann man eine meiner meinung nach ziemlich gute verschachtelung erreichen und für sich selber zum bearbeiten den code einfach halten.
das was dort im moment schief gelaufen ist, ist, dass 2 verschiedene dokumente aneinander geraten sind.
wenn du mein problem sehen willst, schau auf www.freie-geister.de/function.php
Hallo, Carl,
templates sind eine art html dateien, allerdings benutzt du nicht den vollständigen code. das ziel ist es php-code von design zu trennen.
über einen php-befehl verbindet man die template datei mit einer variable. dann definiert man über den fastprint-befehl die seite, die vom script aufgerufen wird. und eigentlich sollten dann anstatt der variablen, die du vorher mit den template-files verbunden hast die template-dateien selber angezeigt werden. Dadurch kann man eine meiner meinung nach ziemlich gute verschachtelung erreichen und für sich selber zum bearbeiten den code einfach halten.
Das klingt logisch und ist verständlich.
das was dort im moment schief gelaufen ist, ist, dass 2 verschiedene dokumente aneinander geraten sind.
wenn du mein problem sehen willst, schau auf www.freie-geister.de/function.php
Was dort das Problem ist, musst du mir erklären. Ich sehe eine unvollständige HTML-Seite beziehungsweise ein Tabellenfragment. Ich kann anhand dessen aber immer noch nicht mutmaßen, worin der Fehler liegt, da ich weder weiß, wie es richtig angezeigt werden soll (vermutlich werden mehrere Templates nicht ausgegeben), noch ist mir der dahinterliegende PHP-Code bekannt, welcher mit hoher Wahrscheinlichkeit den beziehungsweise die Fehler enthält.
Ich mutmaße, dass anstatt der Zeichenkette "left_navbar_oben" der Inhalt des gleichnamigen Templates ausgegeben werden sollte, aber genauere Vermutungen kann ich nicht anstellen, da mir unbekannt ist, welchen Code du für das Einbinden der Templates benutzt.
Naheliegend wäre, dass du anhand des beobachteten Problems Rückschlüsse auf den Fehler ziehst. Offensichtlich liegt der Fehler des left_navbar_oben-Problems bei der Ausgabe des Inhalts der (womöglich zuvor eingelesenen) Template-Datei. echo("left_navbar_oben") anstatt echo("$left_navbar_oben") könnte beispielsweise zu der beobachteten Ausgabe führen, aber das ist nur ein Schuss ins Blaue, solange ich deinen PHP-Code nicht kenne.
Folglich bitte ich noch einmal um genauere Informationen.
Grüße,
Mathias
hi
ja an den code hätt ich denken können ;)
den quelltext gibts unter www.freie-geister.de/function.txt
bei define wird eine template-datei mit einer template-variable verbunden, bei assign wird der varialbe ein wert zugewiesen.
Hallo,
<www.freie-geister.de/function.txt>
bei define wird eine template-datei mit einer template-variable verbunden, bei assign wird der varialbe ein wert zugewiesen.
Ja, ich habe mich einmal in die Anleitung von FastTemplate eingelesen, durchblicke es aber noch nicht ganz.
Soweit ich das verstanden habe, hat der Code keine offensichtlichen Fehler, ich kann mir die unvollständige Ausgabe nicht erklären. Wie kommt left_navbar_oben dort hinein, es ist doch nur left_navbar zur Ausgabe angegeben...? Welche Templates werden denn ausgegeben und welche nicht? Nur _head und _bottom?
Ich habe nur eine Idee, welche aber sehr unwahrscheinlich ist... Ohne dass ich mir den Code von FastTemplate angesehen habe, denke ich, das der erste Funktionsparameter für parse und FastPrint als Konstante übergeben wird, sonst müsste ein $ vor dem Variablennamen nötig sein.
Ich weiß nicht, ob Konstantennamen oder Schlüssel für assoziative Arrays erlaubt sind, welche mit einem _ (Unterstrich) beginnen, es kann also sein, dass es helfen würde, wenn du _header und _footer ohne Unterstriche am Anfang notierst - ich habe aber keine großen Hoffnungen, da dort nicht der Fehler auftritt.
Ich weiß leider keinen Rat mehr, vielleicht hilft dir die Anleitung weiter, du scheinst das System besser verstanden zu haben als ich... ich verstehe nicht einmal wieso mehr Templates geparst werden, als ausgegeben werden, binden sie einander ein und müssen deshalb "rekursiv" geparst werden? Wahrscheinlich... Stimmt denn die Reihenfolge?
Ich bin mir nicht sicher, ob folgendes richtig ist:
$tpl->parse(left_navbar, "left_navbar");
$tpl->parse(left_navbar_oben, "left_navbar_oben");
$tpl->parse(left_navbar_mitte, "left_navbar_mitte");
$tpl->parse(left_navbar_unten, "left_navbar_unten");
Es muss doch folgendermaßen vorgegangen werden:
1. ersetze alle Vorkommnisse von 'left_navbar_oben' im Template 'left_navbar' durch den Inhalt des Templates 'left_navbar_oben' (Gehe ich richtig in dieser Annahme? Oder soll '{left_navbar_oben}' ersetzt werden?)
2. ersetze alle Vorkommnisse von 'left_navbar_mitte' im Template 'left_navbar' durch den Inhalt des Templates 'left_navbar_mitte'
3. ersetze alle Vorkommnisse von 'left_navbar_unten' im Template 'left_navbar' durch den Inhalt des Templates 'left_navbar_unten'
4. Gebe den Inhalt des Templates 'left_navbar' aus, welcher mglw. die Inhalte der drei anderen left_navbar_*-Templates enthält
Ich bin mir nicht sicher, ob der obige Code das löst, vor allem die immer gleichen (doppelten) Parameter scheinen mir seltsam, denn es muss doch angegeben werden, *was* soll in *welcher Datei* ersetzt werden soll... nein, wenn ich http://www.thewebmasters.net/php/FastTemplate.phtml#parse_RETURN_FileHandle_s_ lese, wird mir klar, dass das automatisch gemacht wird.
Ich mutmaße, dass die left_navbar_*-Templates bekannt sein müssen, wenn left_navbar auf sie referenziert (das tut es doch, oder?), also setze die left_navbar-Definition ans Ende:
$tpl->parse(left_navbar_oben, "left_navbar_oben");
$tpl->parse(left_navbar_mitte, "left_navbar_mitte");
$tpl->parse(left_navbar_unten, "left_navbar_unten");
$tpl->parse(left_navbar, "left_navbar");
Nicht dass das eine Lösung wäre... entschuldige, ich verstehe es nicht, deshalb nur die unbeholfenen Hinweise.
Grüße,
Mathias
Danke!!! Danke!!! Danke!!!
Hattest recht, ich musste das left navbar nach unten packen.
Jetzt funktioniert alles.
Danke!!!