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)