podpora layoutu u obyč. Template
- bojovyletoun
- Člen | 667
Ahoj, chci dosáhnout následujícího: z důvodu jednoduchosti některých šablon(na řádek) je chci zapsat rovnou v presenteru. Jelikož neexistuje setTemplate(), tak to se dá vyřešit přepsáním createtemplate a přidáním extra property:
public $iDontWantFileTemplate = false;
function createTemplate($class = NULL)
{
if (!$this->iDontWantFileTemplate)
return parent::createTemplate();
else
// k tomuhle se taky vrátím *
$class='Nette\Templating\Template';
return parent::createTemplate($class);
}
function latte($source)
{
$this->iDontWantFileTemplate = true;
$t = $this->template;
$t->setSource($source);
}
Metoda latte, mi to obalí, takže lze zapsat jen
$this->latte('Ahoj{control form}');
teď jen tak na okraj (hvězdička) : nešlo by upravit createTemplate, aby kromě stringu přijímala i instanci? IDE potom může napovídat a je to komfortnější. Sice teď je to možné taky, akorát to spíš považuji za hack:
$t = new Nette\Templating\Template;
$t->blah=1; $t->registerHelper(...);
$t2 = $this->createTemplate($t); //vezme třídu $t a z ní vytvoří další instanci.
$t2->blah není;
Ale k hlavnímu problému:
(V případě, že vytvořím filetemplate, tak je vše v pořádku). Ale šablona třídy template se vykreslí bez layoutu.
- Pokud přidám ‚{extends mujalyout.latte}‘ do šablony, tak mi po 6 sekunách a 60 MB shoří php s chybou:
Errors1× PHP Warning: include(C:\we..ce9.php): failed to open stream: Too many open files in C:\w..\LimitedScope.php:73
1× PHP Warning: include(): Failed opening 'C:\we..e9.php' for inclusion (include_path='.') in C:\we..ls\LimitedScope.php:73
Zkusil jsem tedy ještě do metody latte přidat
$file=__DIR__."/../templates/@layout.latte";
$t->_extends=$file;
$t->extends=$file;
$t->layout=$file;
Ale opět bez výsledku.
Nevíte, jak s tím pomoci, nebo jsem něco dělám špatně? Zběžně jsem se díval do zdrojáku a mám podezření na CoreMacros::includetemplate.
EDIT. Vážně zakopaný pes je Zde . Totiž layout(což má být filetemplate) se vytvoří pomocí clone aktální template, což je Template, Nedojde k zavolání setFile… Nevíte jak z toho ven? To by asi chtělo přepsat továrničku na šablony, aby se používalo něco chytřejšího než clone a oddělit předávání paramentrů typu basepaj, user…
Teď mě napadlo předat do šablony $_extends přímo objekt FileTemplate …
Editoval bojovyletoun (8. 1. 2012 19:21)