Nastavenie obsahu šablony view a layoutu z reťazca II
- Cifro
- Člen | 245
Nadviažem na toto vlákno.
Ja som si v tamtom vlákne spomínaný problém rozšíril o layouty… V DB si ukladam šablony layoutov a šablony view. Ale nie vždy tam musia byť uložené. Môže to byť nasledovne:
- layout môže byť uložený v DB a view ako súbor na disku
- layout môže byť uložený v súbore na disku a view v DB
- aj layout aj view môžu byť uložené v DB
- layout a view môžu byť uložené v súboroch na disku (Nette default)
Dostal som sa až po prepisanie createTemplate v BasePresenteri:
// trochu skomprimované, aby to nebolo na pol strany
protected function createTemplate(){
$page = Page::find(array('id' => $this->getParam('id'),'published' => '1'));
$template = parent::createTemplate();
if($page->layoutTemplateId !== null){ // testujem či ma daná 'Page' layout uložený v DB
$template = $this->createStringTemplate($page);
}
if($page->viewTemplateId !== null){ // či ma 'Page' uloženú šablonu view
$template = $this->createStringTemplate($page);
}
$template->page = $page; // len predavam celý objekt do šablony
return $template;
}
createStringTemplate()
je skoro to isté len namiesto
new Template
, vytvaram new StringTemplate
private function createStringTemplate($page){
// parametre sú typu Models\Template čo je potomok Ormion\Record
$template = new StringTemplate($page->layoutTemplate, $page->viewTemplate);
//... zvyšok rovnaký ako v createTemplate v triede Control
A tu už si neviem rady, pretože pri situáciach „layout
v DB, view
na disku“ je potrebné aby
StringTemplate
vedelo nastaviť jak obsah šablony z reťazca tak
aj súbor napr. layoutu. A ďalej je problem so sendTemplate()
metódou, kde kontrolujem, či je šablona z DB alebo nie, keď nie zbehne
normálne prehľadavanie súborov pomocou formatLayoutTemplateFiles
a formatTemplateFiles
.
Keď to celé nejak sa dá do kopy tak vo vysledku je aj tak vynimka
Call to undefined block 'content'.
z LatteMacros triedy.
Samozrejme ten block tam je dobre. Len to, že šablona layoutu je v inej
cachei a šablona view tiež. Asi preto tá vynimka.
Neriešil už niekto takéto niečo? Alebo nápady ako na to? Ja som už z toho v p… ehm v koncoch.