Služba TemplateLocator: TODO

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

Pokud chci upravit způsob jak hledat šablony pro layout či view, je potřeba v presenteru překrýt několik protected metod. Tento způsob ale vůbec není znovupoužitelný, protože nejde vyčlenit do nějaké třídy, kterou bych mohl později jednoduše použít.

Tyto metody by tedy měly být součástí nějakého interfacu ITemplateLocator, který by implementovala služba dostupná a vyměnitelná v DIC.

Nemáte někdo chuť to implementovat?

Caine
Člen | 216
+
0
-

+1

David Grudl
Nette Core | 8227
+
0
-

Jde konkrétně o dvě public metody formatLayoutTemplateFiles() a formatTemplateFiles(). Proč by to nešlo vyčlenit do nějaké třídy?

	function formatLayoutTemplateFiles()
	{
		return $locator->formatLayoutTemplateFiles();
	}
Honza Marek
Člen | 1664
+
0
-

Ano, můžeš si udělat třídu. Ale nezbaví tě to nutnosti přepisovat v každém projektu v BasePresenteru ty format metody. Tady pomůže jedině trait :)

Šaman
Člen | 2661
+
0
-

Vzhledem k tomu, že už jsem na dvou projektech TemplateLocator psal, tak bych byl pro oddělení. Koneckonců, zase to trochu odlehčí Presenterům.

mishak
Člen | 94
+
0
-

rixxi/template-locator připomínky a pull requesty uvítám (kód funguje na nette @dev)

Případné testy a readme udělám někdy koncem týdne.

extensions:
	templateLocator: Rixxi\Templating\DI\TemplateLocator

templateLocator:
	class: detect|default|priority|<class> # default detect
	directories: # default []
		- %appDir%
		# nebo alternativně - NETESTOVANO, NEJSPÍŠ NEFUNGUJE - vyžaduje menší úpravu
		"%appDir%": 9000
		"%appDir%/../vendor/x/y/src": 100

	cache: on|off # default off
	cacheExistingFilesOnly: on|off # default off
class Presenter ... {

	use \Rixxi\Templating\DI\Presenter\TemplateLocator; # přepíše fce pro hledání šablon

	...

class:

  • detect pokud jsou directories prázdné a žádný extension nepřidá adresáře zvolí default jinak priority
  • default identický kód s nette@dev přepsaný do vlastní třídy
  • priority kód podobný default, prochází všechny definované adresáře (výchozí je připojen nakonec – nejnišší) podle priority od nejvižší po nejnižší pro jednotlivých úrovních (první top level, pak rodiče všech atd.).

directories:
Má smysl jen pro class detect a priority.
Obsahuje seznam adresářů (všem bude přiřazena priorita PHP_INT_MAX) nebo jejich mapu [ 'dir' => <priority> ].
Adresáři jsou root adresáře pro templaty (většinou na stejné úrovni jako složka presenters)

cache:
Zvolený class bude cachovat. Cache se automaticky vymaže při změně konfigurace sekce templateLocator.

cacheExistingFilesOnly:
Má smysl jen s cache: on.
Vyfiltruje neexistující soubory ze seznamu. Experimentální jako optimalizace, pokud bude plno adresářů s šablonami.

Rozšířitelnost
Rozšíření hledá ostatní rozšíření implementující ITemplateLocatorDirectoryProvider.

Rozšíření na komponenty je zatím v teoretické fázi.

Editoval mishak (22. 7. 2013 23:06)