Ako vytvoriť dobre použiteľný addon

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

Zdravím,

vytvoril som komponentu, ktorá je pre mňa užitočná, ale na môj vkus sa zložito konfiguruje. Mne osobne to až tak neprekáža, ale rád by som svoje riešenie poskytol ostatným:)

Ide o riešenie problému s JS a CSS – vďaka nemu sa mi vždy do hlavičky vložia iba css a js ktoré sú aktuálne potrebné pre fungovanie stránky.
Obsahuje upravený HeaderControl a novo vytvorený FileCollector – vďaka robotloaderu bez problémov.
Konfiguruje sa to cez neon – tam problém nevidím.
Problém:
Zložitá konfigurácia z môjho pohľadu pozostáva hlavne z nutnej úpravy BasePresenter.php

	public function templatePrepareFilters($template)
	{
		$template->registerFilter($latte = $this->context->nette->createLatte());
		$set = Nette\Latte\Macros\MacroSet::install($latte->compiler);
		$set->addMacro('css' ...
		...
	}

a pre fungovanie v komponentách treba vytvoriť „medzikus“ medzi samotnú triedu komponenty a \Nette\Application\UI\Control a vložiť doňho obdobný ale nie totožný kód makier ako do BasePresenter-u.

Dá sa toto vyriešiť nejak pohodlnejšie?
Ďakujem.

Filip Procházka
Moderator | 4668
+
0
-

Doporučovaný postup je vytvořit vlastní rozšíření compileru a v něm už si pak snadno vlastní makro registruješ.

Pokud jediné co potřebuješ konfigurovat jsou makra, tak to je oneliner a není na to potřeba ani rozšíření. – tohle funguje, ale zatím to je jenom v masteru.

romiix.org
Člen | 343
+
0
-

HosipLan napsal(a):

Doporučovaný postup je vytvořit vlastní rozšíření compileru a v něm už si pak snadno vlastní makro registruješ.

Pokud jediné co potřebuješ konfigurovat jsou makra, tak to je oneliner a není na to potřeba ani rozšíření.

Ak tak pozerám, tak by sa teda aj načítanie makier dalo vyriešiť neon-om. To znie ideálne:)
Jediný problém je, že potrebujem pre view a componentu rôzne makrá – resp. definícia napr. makra css je rozdielna.
Potrebujem pri spracovaní získať cestu k šablóne. Vo view sa k tomu dá dostať pomocou

$presenter->template->getFile()

a v šablóne komponenty

$template->getFile()

Ak sa mi podarí makrá prinútiť pracovať korektne v oboch prípadoch, tak je to vyriešené.
Každopádne toto je už asi na iné vlákno. Osobne si myslím, že je to dokonca bug.