Macro extends/layout chybna cesta [nette 2.0.12]

- Patrik Votoček
 - Člen | 2221
 
$_presenter->findLayoutTemplateFile() se volá pouze pokud
zadáš {extends auto}. Pokud zadáváš cestu k souboru musí
být relativní k souboru kde cestu zadáváš.

- HappyFace
 - Člen | 162
 
toho som sa obaval :/
ale tak nakoniec som sa este povrtal vtom a dosiel som az na methodu
Nette\Latte\Macros\CoreMacros::includeTemplate
a prisposobil som si tam to tvorenie ciest, pre svoje potreba s ohladom na dorajsiu funkcnost (myslim :P )
$destination = (substr($destination, 0, 1) === '%' ? $params['presenter']->formatLayoutTemplateOneFile($destination, $template->getFile()) : dirname($template->getFile()) . '/' . $destination);
akurat sa mi nepaci, ze som upravoval jadro a tak pri update si budem musiet davat bacha aby som si to nepremazal .. nenapada ta ako by sa to dalo zapisat mimo core?
Editoval HappyFace (9. 8. 2013 15:11)

- HappyFace
 - Člen | 162
 
automatickeho dohladania extends layoutu
methoda „formatLayoutTemplateOneFile“ je len rozsirena methoda „formatLayoutTemplateFiles“ ktoremu je predany nazov layoutu, ktory chcem nahrat a nasledne je vrateny list ciest kde by sa mohol nachadzat, rovnake chovanie ako je u vyhladavania umiestnenia @layout potom sa prechadza vygenerovany list kym sa nenajde existujuca cesta ktora je cez return posunuta na dalsie uz clasicke spracovanie.. Akurat si tam cez $template->getFile() kontrolujem aby som nevratil znova tu istu sablonu ale vzdy o uroven nizsie.
PS: toto vsetko mi funguje a zdasa ze to ani nejak neovplivnuje doterajsiu funkcionalitu az nato ze by som to rad mal niekde mimo core
Editoval HappyFace (9. 8. 2013 22:30)

- HappyFace
 - Člen | 162
 
asi zacnem pisat anglicky :D
chovanie, ktore chcem dosiahnut som pisal @David Grudl , co mam pekne spravene ako pises v BasePresenteri ale aby som mohol aplikovat volanie na vyhladavanie „formatLayoutTemplateOneFile“ musel som editovat priamo CORE, konkretne „Nette\Latte\Macros\CoreMacros::includeTemplate“ co nieje 2× spravne
old line 354:
$destination = dirname($template->getFile()) . '/' . $destination;
po editu:
$destination = (substr($destination, 0, 1) === '%' ? $params['presenter']->formatLayoutTemplateOneFile($destination, $template->getFile()) : dirname($template->getFile()) . '/' . $destination);
				
- Patrik Votoček
 - Člen | 2221
 
zkus
{extends $_presenter->formatLayoutTemplateOneFile('mySpecialLayout')}
;-)

- HappyFace
 - Člen | 162
 
Prosim ta mohol by si mi pomoct?
Prave sa to znazim prepisat ako UI macro kedze ten zapis je sialene dlhy a hlavne vybato to v templete hrozne ale mam par problemov.
Podla "kucharky ":https://latte.nette.org/en/develop#… som si zaregistroval svoju triedu pre pridavanie makier atd atd , k veci mam tam metodu:
public function autoExtends(MacroNode $node, PhpWriter $writer)
{
	if(!$node->args)
	{
		throw new \Nette\Latte\CompileException('Missing destination in {' . $node->name . '}');
	}
	if(!empty($node->parentNode))
	{
		throw new \Nette\Latte\CompileException('{' . $node->name . '} must be placed outside any macro.');
	}
	#$writer->write('$_presenter->formatLayoutTemplateOneFile(\'' . $node->args . '\')');
	$writer->write('$_l->extends =  $_presenter->formatLayoutTemplateOneFile(\'' . $node->args . '\');');
	return;
}
ale netusim ako mam spravne zapisat vystup :/
________________________________________________________________________________
.. OK :) takze vsetko sa da ked sa chce .. nakoniec som to vyriesil nasledovne (ale stale je to zle :/ lebo upravujem Core)
- spravil som si extends \Nette\Latte\Macros\UIMacros
 - v UIMacros som zmenil prava u private $extends; ⇒ protected $extends; (v com vidim este problem a potrebujem spravne upravit)
 - upravil som potom uz len methodu nasledovne:
 
		public function autoExtends(MacroNode $node, PhpWriter $writer)
		{
			if(!$node->args)
			{
				throw new \Nette\Latte\CompileException('Missing destination in {' . $node->name . '}');
			}
			if(!empty($node->parentNode))
			{
				throw new \Nette\Latte\CompileException('{' . $node->name . '} must be placed outside any macro.');
			}
			$this->extends = '$_presenter->formatLayoutTemplateOneFile(' . $node->args . ', $template->getFile())';
			return;
		}
					Editoval HappyFace (15. 8. 2013 14:00)