Okay, ich dachte eigentlich, ich hätte das schlauer gelöst, aber dem war wohl nicht so.
Eine Idee:
PHP-Code:
<?php
class MySmarty extends Smarty
{
protected $_stack;
public function __construct()
{
parent::Smarty();
$this->_stack = array();
}
public function startTemplate()
{
array_push($this->_stack, $this->get_template_vars());
$this->clear_all_assign();
}
public function endTemplate()
{
$this->clear_all_assign();
$this->assign(array_pop($this->_stack));
}
}
Damit lassen sich Templates folgendermaßen beliebig tief verschachteln:
PHP-Code:
$smarty = new MySmarty();
$smarty->startTemplate();
$smarty->assign('blub', 'Das hier soll ins Index-Template');
$smarty->startTemplate();
// Hier ist "blub" nicht gesetzt
$smarty->assign('text', 'Dies ist ein Test.');
$content = $smarty->fetch('content');
$smarty->endTemplate();
// Hier ist "text" nicht gesetzt
$smarty->assign('content', $content);
$smarty->display('index');
$smarty->endTemplate();
Bei jedem startTemplate werden die bisher zugewiesenen Template-Variablen zwischengespeichert und bei endTemplate wieder zugewiesen.