Hallo delinquent,
ich finde es generell eine gute Idee, mehrere Blöcke in Templates zu verwenden.
Dein Vorschlag würde sich mit den Contenido Bordmitteln auch lösen. Im Folgenden ein Codesnipsel, wie man zwei Blöcke verarbeiten kann:
Code: Alles auswählen
cInclude("classes", "class.template.php", false);
$tpl = new Template();
// statische variable setzen
$tpl->set('s', 'STATIC', 'foo');
// zwei dynamische variablen setzen
$tpl->set('d', 'DYNAMIC', 'bar');
$tpl->next();
$tpl->set('d', 'DYNAMIC', 'bar 2');
$tpl->next();
// template parsen (mit rueckgabe des codes)
$content = $tpl->generate('path/to/template.html', true);
// reset und neue block codes
$tpl->reset();
$tpl->tags['start'] = '<!-- BEGIN:BLOCK[2] -->';
$tpl->tags['end'] = '<!-- END:BLOCK[2] -->';
// zwei dynamische variablen im neuen block setzen
$tpl->set('d', 'DYNAMIC_OTHER', 'lorem ipsum');
$tpl->next();
$tpl->set('d', 'DYNAMIC_OTHER', 'lorem ipsum 2');
$tpl->next();
// entgueltige ausgabe...
$tpl->generate($content);
Das Beispiel ist Programmiertechnisch vielleicht nicht ganz ideal, weil der Inhalt des Templates 2 x geparst wird, tut aber seinen Zweck.
Mann könnte eine Klasse von Template ableiten, und der eine Funktion verpassen, welches sich um das Wechseln der Block-Tags kümmert. Beispiel:
Code: Alles auswählen
class myTemplate extends Template {
function myTemplate($tags=false) {
parent::Template($tags);
}
function setBlock($key=null) {
$this->reset();
if ($key==null) {
// standard tags
$this->tags['start'] = '<!-- BEGIN:BLOCK -->';
$this->tags['end'] = '<!-- END:BLOCK -->';
} else {
// andere block tags
$this->tags['start'] = '<!-- BEGIN:BLOCK['.$key.'] -->';
$this->tags['end'] = '<!-- END:BLOCK['.$key.'] -->';
}
}
}
// verwendung
$tpl = new myTemplate();
...
// dann eine zeile
$tpl->setBlock('2');
// anstatt
$tpl->reset();
$tpl->tags['start'] = '<!-- BEGIN:BLOCK[2] -->';
$tpl->tags['end'] = '<!-- END:BLOCK[2] -->';
...
Das erspart zwar das Setzen der Block-Tags aber nicht das mehrfache Parsen des Templatecodes. Solange sich das aber in Grenzen hält, kann man mit dem Performancenachteil sehr gut leben...
Gruß
xmurrix