Po přepsání n:href makra nefungují snippety

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

Ahoj,
narazil jsem na problém s vlastním makrem a snippety. Přepsal jsem si n:href, ale (některé!) snippety přestaly fungovat.

Registrace:

	/**
	 * @param \Nette\Templating\Template $template
	 */
	public function templatePrepareFilters($template)
	{
		$latte = new \Nette\Latte\Engine;
		\Nette\Latte\Macros\FriendlyMacros::install($latte->parser, $this);

		$template->registerFilter($latte);
	}

Třída maker, snippety nefungují ani pokuď je úplně stejné jako UIMacros.

class FriendlyMacros extends UIMacros
{

	public static function install(Latte\Parser $parser, \Nette\Application\UI\Presenter $presenter = NULL)
	{
		$me = new static($parser);
		$me->addMacro('@href', function(MacroNode $node, $writer) use ($me) {
			return ' ?> href="<?php ' . $me->macroLink($node, $writer) . ' ?>"<?php ';
		});
	}
}

Netušíte, proč to zlobí právě u ajax requestu?

Mikulas Dite
Člen | 756
+
0
-

Aha, nefunguje to, protože jsem dědit od UIMacros. Když vezmu jenom MacroSet, tak je to v pohodě. Proč? Ta chyba je hrozně wtf a zasloužila by si alespoň warning, ale nevidím, kde je problém.

Aurielle
Člen | 1281
+
0
-

Nevidím nikde registraci ostatních maker (CoreMacros, FormMacros) – to možná bude ten problém.
Ne, tak chyba je v tom, že registruješ UI macros 2× (viz Nette\Latte\Engine::construct())

Editoval gmvasek (11. 7. 2011 9:02)

Mikulas Dite
Člen | 756
+
0
-

No jasně, ale měla by se jenom přepsat ta původní. Slabší performance před cachováním je mi fuk, ale snippety to zachovat mělo. Tzn. když se tímhle přepsal i {snippet}, mělo to fungovat dál.

Už to vidím, to je ta Nette obsese na private (a btw taky final). Ty poděděné třídy nemají $namedBlocks.

Každopádně dík.