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

před 10 lety

ViliamKopecky
Nette hipster | 231
+
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;
}

před 10 lety

mcmatak
Člen | 495
+
0
-

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

před 10 lety

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)

před 10 lety

ViliamKopecky
Nette hipster | 231
+
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)

před 10 lety

David Grudl
Nette Core | 6849
+
0
-

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

před 10 lety

ViliamKopecky
Nette hipster | 231
+
0
-

díky

před 10 lety

sodae
Nette Evangelist | 251
+
0
-

Díky !