Seite 1 von 1

Verschiedene Templates in einer schleife ausgeben?

Verfasst: 13.05.2008 19:24
von DarkPrisma
huhu ihr lieben,

wie krieg ich es hin, das ich nur beim ersten durchlauf einer schleife ein anderes tempalte lade, als beim 2.?

if($i==0){
$template->set_filenames(array('newbodykondi' => 'viewtopic_kondi_body.tpl'));
}else{
$template->set_filenames(array('newbodykondi' => 'viewtopic_normal_body.tpl'));
}

$template->assign_var_from_handle('CONTENTBOX', 'newbodykondi');

der printet mir immer nru an der stelle wo ich {CONTENTBOX} im template habe das template viewtopic_kondi_body.tpl hin. nur wieso? die 0 ist 100% da, der geht auch in die if rein, nur er ersetzt das nicht... desweiteren werden die inhalte in dem template nicht geparsed, die variablen sind alle leer...

Verfasst: 14.05.2008 00:05
von gn#36
Den Platzhalter CONTENTBOX gibt's nur ein mal. Beim zweiten Durchlauf wird der also überschrieben, du bekommst also immer nur die Daten aus dem zweiten Durchlauf. Du hast also mehrere Möglichkeiten:
  • Du verwendest nicht einen, sondern zwei unterschiedliche Platzhalter für die beiden Templates
  • Du verwendest die speziell dafür vorhandene Funktion um den Inhalt der Templates erst in eine PHP Variable zu legen und dann von dort in das Template zu schieben.
  • Du packst die beiden Templates einfach zusammen in eines
Der letzte Punkt ist natürlich nicht immer einfach durchzuführen beseitigt aber i.a. viele Probleme. Wenn die Variablen nicht mit Inhalt gefüllt sind wenn sie im Template ankommen, dann liegt das mit hoher Wahrscheinlichkeit daran, dass sie vorher auch noch nicht mit Inhalt gefüllt wurden. Zu dem Zeitpunkt, wo du assign_var_from_handle benutzt wird dieses spezielle Template mit den aktuell vorhandenen Daten geparst und befüllt. Wenn einige der Daten erst später im Skript mit Inhalt gefüllt werden, dann tauchen diese in dem Template dennoch nicht auf, du musst also auf die Reihenfolge achten und das assign_var_from_handle so spät wie möglich durchführen, so dass alle gewünschten Daten da sind.