Nastavenie obsahu šablony view a layoutu z reťazca II

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Cifro
Člen | 245
+
0
-

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.

Cifro
Člen | 245
+
0
-

Ani s odstupom času s tým neviem pohnuť. Niekto? Nejaký nápad / rada?

Editoval Cifro (24. 7. 2010 14:18)