- PHP - Templates .. wie hol ich einen block in einen block ?
Transmitter
- programmiertechnik
hi!
ich habe mal eine frage ..
ich habe jetzt eine layout.html, die ich von smarty parsen lasse.
da wird per {include file="content_block.html"}
ein block reingeparsed ..
jetzt will ich in diesem block verschiedene sachen haben ..
einmal ein anmelde formular, einmal ein änderungformular und einmal einfach einen newstext usw.
wie mach ich das denn jetzt?
in dem content_block.html eine var mit {$inhalt} definieren, und die dann ersetzen?
oder muss ich mir dann noch ein paar html dateien machen, die ich wieder in die content_block.html includeieren?
das ist der knakpunkt bei mir .. wie bekomm ich das zeug in {$inhalt} rein?
Hallo Transmitter,
wie mach ich das denn jetzt?
in dem content_block.html eine var mit {$inhalt} definieren, und die dann ersetzen?
Das ist eine Möglichkeit.
oder muss ich mir dann noch ein paar html dateien machen, die ich wieder in die content_block.html includeieren?
Das wäre eine andere.
das ist der knakpunkt bei mir .. wie bekomm ich das zeug in {$inhalt} rein?
Wenn Du über {$inhalt} gehen willst, dann kannst Du ja eine zweite Smarty-Template machen, die den Inhalt darstellt. Smarty kennt eine Methode fetch(), die Dir die Ausgabe zurückliefert, anstelle sie tatsächlich durchzuführen. Du kannst also eine zweite Smarty-Instanz kreiren, den Inhalt der Template holen und ihn dann in den Template-Paramter {$inhalt} von der ersten Template reinschreiben. Such' Dir was aus...
Grüße,
Christian
in dem content_block.html eine var mit {$inhalt} definieren, und die dann ersetzen?
Das ist eine Möglichkeit.
oder muss ich mir dann noch ein paar html dateien machen, die ich wieder in die content_block.html includeieren?
Das wäre eine andere.
Wenn Du über {$inhalt} gehen willst, dann kannst Du ja eine zweite
Smarty-Template machen, die den Inhalt darstellt. Smarty kennt eine Methode fetch(), die Dir die Ausgabe zurückliefert, anstelle sie tatsächlich durchzuführen. Du kannst also eine zweite Smarty-Instanz kreiren, den Inhalt der Template holen und ihn dann in den Template-Paramter {$inhalt} von der ersten Template reinschreiben. Such' Dir was aus...
wie performant ist denn welche lösung?
und welche wird denn bei großen systemen eingesetzt?
wenn ich im nachhinein noch was an meinem anmelde formular ändern will, dann ist es wohl besser, smarty noch mal zu instanzieren?
das mit dem fetch wäre dann auch ne klasse idee!
ist das vom traffic / zugriff her skalierbar ohne performance verlußte?
Hallo Transmitter,
wie performant ist denn welche lösung?
Das {include} dürfte schneller sein, da Du sonst den kompletten Ausgabecode in einer Variable rumkopierst - aber nur unmerklich.
wenn ich im nachhinein noch was an meinem anmelde formular ändern will, dann ist es wohl besser, smarty noch mal zu instanzieren?
das mit dem fetch wäre dann auch ne klasse idee!
Erst einmal: Fetch schließt Smarty instatieren mit ein. Das ganze dreht sich doch um folgendes: Willst Du immer die gleiche Datei da reinkopieren oder nicht? Und wenn nicht, kann der Inhalt mal nicht direkt aus Smarty kommen?
Situation 1: Immer die gleiche Datei includen:
{include file="irgendwas.html"}
Situation 2: Jeweils eine andere Datei includen:
{include file=$welche_datei}
und dann muss in der Smarty-Variable "welche_datei" halt der Name der Datei stehen.
Situation 3: Der Inhalt kommt nicht (nur) aus Smarty, sondern evtl. auch woanders her:
{$inhalt}
und die Smarty-Variable "inhalt" muss halt den einzufügenden Inhalt enthalten; das *kann* dann vom Aufruf der Methode fetch einer zweiten Smarty-Instanz kommen.
ist das vom traffic / zugriff her skalierbar ohne performance verlußte?
Ich denke, dass selbst Situation 3 bei überschaubaren Dateigrößen noch recht performant ist. Wenn aber bei der Füge-über-Variable-ein-Methode "riesengroße" Dateimengen verarbeitet werden (> 100 KB schätze ich mal, kann mich aber auch um Größenordnungen täuschen), dann kann man den Unterschied schon messen.
Grüße,
Christian
also über 100 kb dürfte ich selte kommen, von daher ist wohl eine 2. instanz angesagt.
alle situationen sind zu berücksichtigen, da es wie gesagt entweder ein anmeldeformular, ein ändernformular oder ein text aus der db sein kann .. oder auch was ganz anderes.