Macro extends/layout chybna cesta [nette 2.0.12]

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

Ahojte,

prosim neviete kde sa/odkial sa cesta pre toto macro ?

kukal som na ten kod toho mackra „macroExtends“ a malo by to brat cesty ake su v presentery ‚$_presenter->findLayoutTemplateFile()‘ ale ked si to dumpujem nic sa nedeje :(

Patrik Votoček
Člen | 2221
+
0
-

$_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
+
0
-

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)

David Grudl
Nette Core | 8233
+
0
-

Jakého chování chceš docílit?

HappyFace
Člen | 162
+
0
-

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)

bazo
Člen | 620
+
0
-

presun ju do nejakeho BasePresenteru

HappyFace
Člen | 162
+
0
-

bazo napsal(a):

presun ju do nejakeho BasePresenteru

a ako ?? naozaj ma nic nenapada ako by som mohol tuto methodu Nette\Latte\Macros\CoreMacros::includeTemplate editovat v BasePresenter

bazo
Člen | 620
+
0
-

tak pockat, myslel som, ze sa bavime o metode formatLayoutTemplateOneFile

fakt by bolo lepsie keby si napisal co chces dosiahnut.

polda mna ti staci pretazit metodu findLayoutTemplateFile() alebo formatTemplateFiles alebo ako sa to vola, v base presenteri

HappyFace
Člen | 162
+
0
-

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
+
0
-

zkus {extends $_presenter->formatLayoutTemplateOneFile('mySpecialLayout')} ;-)

HappyFace
Člen | 162
+
0
-

Patrik Votoček napsal(a):

zkus {extends $_presenter->formatLayoutTemplateOneFile('mySpecialLayout')} ;-)

toto vypada velmi dobre akurat pre rychlejsie pouzitie presunit to do vlastneho macra :) myslim ze toto bude najlepsia cesta

DIK ;) idem to vyskusat

HappyFace
Člen | 162
+
0
-

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)

  1. spravil som si extends \Nette\Latte\Macros\UIMacros
  2. v UIMacros som zmenil prava u private $extends; ⇒ protected $extends; (v com vidim este problem a potrebujem spravne upravit)
  3. 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)