Hledání layoutu v nadřazených modulech

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

Upravená verze Presenter::formatLayoutTemplateFiles, která prohledává všechny nadřazené adresáře modulů a hledá layouty. Třeba se to někomu bude hodit.

	/**
	* Formats layout template file names. Looking through each parent modules.
	*
	* @param string $
	* @param string $
	* @return array
	*/
	public function formatLayoutTemplateFiles($presenter, $layout)
	{
		$root = Environment::getVariable('templatesDir');
		$presenter = str_replace(':', 'Module/', $presenter);
		$module = substr($presenter, 0, (int) strrpos($presenter, '/'));
		$base = '';
		if ($root === Environment::getVariable('presentersDir')) {
			$base = 'templates/';
			if ($module === '') {
				$presenter = 'templates/' . $presenter;
			} else {
				$presenter = substr_replace($presenter, '/templates', strrpos($presenter, '/'), 0);
			}
		}

		$layouts = array(
			"$root/$presenter/@$layout.phtml",
			"$root/$presenter.@$layout.phtml",
			"$root/$module/$base@$layout.phtml",
			);

		$modules = explode("/", $module);
		for($i = count($modules) - 1;$i >= 0;$i--) {
			$s = "$root/";
			for($k = 0;$k <= $i;$k++)
			$s .= $modules[$k] . "/$base@$layout.phtml";
			$layouts[] = $s;
		}

		$layouts[] = "$root/$base@$layout.phtml";
		return $layouts;
	}
mcmatak
Člen | 490
+
0
-

taky se hodně přimlouvám, aby tohle v nette bylo přidáno

PetrP
Člen | 587
+
0
-

mcmatak napsal(a):

taky se hodně přimlouvám, aby tohle v nette bylo přidáno

ne každý to potřebuje, a takovýhle hladani o neco zpomalí aplikací. tedy je nejlepší kdyz potrebujes přídat si tohle nebo i uplne jinou detekci do BasePresenteru.

(mobilní příspěvek)

ViliamKopecky
Nette hipster | 230
+
0
-

Ještě upráva, měl jsem tam bug, a moc jsem to nekontroloval.

<?php

	public function formatLayoutTemplateFiles($presenter, $layout)
	{
		$root = Environment::getVariable('templatesDir');
		$presenter = str_replace(':', 'Module/', $presenter);
		$module = substr($presenter, 0, (int) strrpos($presenter, '/'));
		$base = '';
		if ($root === Environment::getVariable('presentersDir')) {
			$base = 'templates/';
			if ($module === '') {
				$presenter = 'templates/' . $presenter;
			} else {
				$presenter = substr_replace($presenter, '/templates', strrpos($presenter, '/'), 0);
			}
		}

		$layouts = array(
			"$root/$presenter/@$layout.phtml",
			"$root/$presenter.@$layout.phtml",
			);

		$modules = explode("/", $module);
		for($i = count($modules) - 1;$i >= 0;$i--) {
			$s = "$root/";
			for($k = 0;$k <= $i;$k++)
			    $s .= $modules[$k] . "/";
			$s .= "$base@$layout.phtml";
			$layouts[] = $s;
		}

		$layouts[] = "$root/$base@$layout.phtml";
		return $layouts;
	}

?>

Editoval enoice (9. 8. 2009 15:53)

David Grudl
Nette Core | 8099
+
0
-

Implementováno při použití Presenter::$oldModuleMode = FALSE

ViliamKopecky
Nette hipster | 230
+
0
-

díky

sodae
Nette Evangelist | 250
+
0
-

Díky !