Dohledávání šablon v pluginovatelné aplikace (relativně vůči pozici presenteru)

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

V některých aplikacích může být šikovné, když se nějaká funkčnost dodá pouhým dokopírováním složky. Funkčností myslím skupinu několika presenterů, komponent a šablon. S presentery a komponentami není z hlediska umístění problém, RobotLoader je umí najít kdekoliv. Šablony presenterů jsou hledané pomocí metody formatTemplateFiles.

class BasePresenter extends Presenter {

	public function formatTemplateFiles($presenter, $view) {
		$presenterFile = $this->getReflection()->getFileName();
		$templatesDir = realpath(dirname($presenterFile) . "/../templates/");

		$colonPos = strpos($presenter, ":");
		if ($colonPos !== false) {
			$presenter = substr($presenter, $colonPos + 1);
		}

		return array(
			"$templatesDir/$presenter/$view.phtml",
			"$templatesDir/$presenter.$view.phtml",
			"$templatesDir/@global.$view.phtml",
		);
	}

}

Takto implementovaná metoda vyhledá šablony ve složce umístění presenteru/../templates/cesta k šabloně. Což je kompatibilní i s normální adresářovou strukturou, ale presenter a jeho šablony lze takhle umístit kamkoliv kam sahá moc RobotLoaderu.

P.S.: Doufám, že tenhle tip bude pro někoho užitečný. Já když jsem na to přišel, tak jsem z toho měl hroznou radost :-D

Editoval Jan Tvrdík (26. 2. 2010 14:02)

Jan Tvrdík
Nette guru | 2595
+
0
-

Změnil jsem název vlákna a promazal příspěvky týkající se změny.