Adresárová štruktúra pre viacej šablón → v2.0

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

Aká je správna forma adresárovej štruktúry ak chcem použiť viacej druhov šablón? Dočítal som sa akurát že to ide cez moduly ale nepodarilo sa mi to rozchodiť. Najlepšie by bolo aby adresár templates ostal tak ako je a v ňom by som mal ďalšie šablóny napr. GreenTemplate, RedTemplate, BlueTemplate atď. A až potom v nich bude základný @layout a v podadresároch ďalšie *.latte súbory podľa názvu akcie. Používam verziu 2.0.

Stručne povedané mám otázky ohľadne:

  • aká je správna adresárová štruktúra pre viacej šablón alebo ako dosiahnuť takú akú chcem
  • kde všade mám čo ponastavovať aby som docielil želaný výsledok (bootstrap.php, confing.ini, …)
  • akým spôsobom potom môžem dynamicky meniť šablónu napr. podľa údajov z DB

Ďakujem

TeeBee87
Člen | 14
+
0
-

Spíše než na použití modulů to vypadá na to upravit metody formatLayoutTemplateFiles a formatTemplateFiles v BasePresenteru v závislosti na parametru, který ponese informaci o zvoleném vzhledu (Red, Green, Blue). Zkušenější uživatelé ti určitě zanedlouho poradí lépe.

Šaman
Člen | 2666
+
0
-

Např. takhle:

<?php
// tohle das do basepresenteru
/**
 * Prepsana metoda z Nette
 * Zmeni cestu k sablonam layoutu: APP_DIR/Module/templates/theme/...
 * Pro jistotu se s nejnizsi prioritou bude hledat i v puvodnim adresari
 */
public function formatLayoutTemplateFiles($presenter, $layout)
{
    $appDir = Environment::getVariable('appDir');
    $theme = Environment::getVariable('theme');

    $path = '/' . str_replace(':', 'Module/', $presenter);

    $templatesTheme = '/templates/' . $theme;
    $pathP = substr_replace($path, $templatesTheme, strrpos($path, '/'), 0);

    $list = array(
        "$appDir$pathP/@$layout.latte",
        "$appDir$pathP.@$layout.latte",
        "$appDir$pathP/@$layout.phtml",
        "$appDir$pathP.@$layout.phtml",
    );
    while (($path = substr($path, 0, strrpos($path, '/'))) !== FALSE) {
        $list[] = "$appDir$path$templatesTheme/@$layout.latte";
        $list[] = "$appDir$path$templatesTheme/@$layout.phtml";
    }

    $list = array_merge($list, parent::formatLayoutTemplateFiles($presenter, $layout));

    return $list;
}
?>

A výsledek je pro modul ‚Modul‘, presenter ‚Presenter‘, pohled ‚view‘ a vzhled ‚theme‘ toto:

<?php
/NetBeansProjects/pokus/document_root/../app/ModuleModule/templates/theme/Presenter/@view.latte
/NetBeansProjects/pokus/document_root/../app/ModuleModule/templates/theme/Presenter.@view.latte
/NetBeansProjects/pokus/document_root/../app/ModuleModule/templates/theme/Presenter/@view.phtml
/NetBeansProjects/pokus/document_root/../app/ModuleModule/templates/theme/Presenter.@view.phtml
/NetBeansProjects/pokus/document_root/../app/ModuleModule/templates/theme/@view.latte
/NetBeansProjects/pokus/document_root/../app/ModuleModule/templates/theme/@view.phtml
/NetBeansProjects/pokus/document_root/../app/templates/theme/@view.latte
/NetBeansProjects/pokus/document_root/../app/templates/theme/@view.phtml
/NetBeansProjects/pokus/document_root/../app/ModuleModule/templates/Presenter/@view.phtml
/NetBeansProjects/pokus/document_root/../app/ModuleModule/templates/Presenter.@view.phtml
/NetBeansProjects/pokus/document_root/../app/ModuleModule/templates/@view.phtml
/NetBeansProjects/pokus/document_root/../app/templates/@view.phtml
?>

Použije se první nalezený soubor.

Podobně si uprav ještě metodu formatTemplateFiles

Editoval Šaman (17. 12. 2010 11:31)

cirdaz
Člen | 21
+
0
-

Já jsem to aplikoval a vykresluje mi to divně
viz
…/AdminModule/templates/default/Default/@default.latte

přitom ten soubor se jmenuje takto a je v jiné adresářové struktuře..
/AdminModule/templates/default/Default.default.latte

Nevíte čím to bude nebo špatně chápu načítání templatů

cirdaz
Člen | 21
+
0
-

Bez té funkce mi to vykresluje takto
/AdminModule/templates/Default
Admin:Default
default
D:\_!internet\nettepokus/app/AdminModule/templates/Default/default.latte

Proč se tam přidává /Default když ve skutečnosti taková složka neexistuej?