Zobrazování layoutu v modulu
- bluray
- Člen | 178
Dobrý den, chci aby se mi v nějakém modulu zobrazovat layout který je
uložený v templates/@layout.latte.
ve složce app/Modul/templates layout nemám a hlásí mi to tuhle chybu:
FileNotFoundException: Layout not found. Missing template
'…\app\FileModul\templates\FileManager\@layout.latte'.
Potřebuju mít jeden společný layout pro všechny moduly.
Díky za radu
- Šaman
- Člen | 2659
Uprav si v BasePresenteru metodu formatLayoutTemplateFiles
Ideálně tak, že do pole, které ti vrátí originální metoda jen přidáš
svoji cestu. Podle toho, jestli ji dáš na začátek, nebo na konec, určíš,
jestli bude mít přednost tvoje cesta, nebo ta původní (v případě, že by
jsi měl @layout na více místech).
- MartinitCZ
- Člen | 580
Tak si ten @layout v \app\FileModul\templates\FileManager
vytvoř a vlož do něj toto:
{layout '../@layout.latte'}
Pro tebe nejlepší způsob.
Editoval martinit (16. 6. 2014 20:49)
- Šaman
- Člen | 2659
Jestli to chceš jen v jediném případě, tak to uděláš, jak psal
@martinit.
Jestli chceš změnit vyhledávání ve všech šablonách presenterů, tak si
do BasePresenteru přidej toto:
<?php
...
public function formatLayoutTemplateFiles()
{
$layoutFiles = parent::formatLayoutTemplateFiles();
$dir = dirname($reflection->getFileName()); # adresář aktuálního presenteru
$layoutFiles[] = "$dir/cesta/k/layoutu/@layout.latte";
return $layoutFiles;
}
...
?>
Tahle metoda prostě vrací pole všech potenciálních souborů s layoutem. Při hledání layoutu se vezme první, který existuje. Pokud neexistuje žádný, vyhodí se výjimka. Takže ty si vezmeš ten seznam, který ti dodá parent (tedy defaultní chování) a na konec přidáš ještě ten soubor, který chceš používat ty.
- Šaman
- Člen | 2659
bluray napsal(a):
Děkuji za radu, to od martinita funguje, ale ten formatLayoutTemplateFiles ne, jako cestu jsem zvolil tu co jsem měl v {layout…} a nefunguje to. má se ta metoda někde volat?
Nemá, jen tvůj presenter musí dědit od BasePresenteru. A pozor, v $dir
je adresář presenteru. U šablon se to hledá relativně k souboru šablony.
Takže u tebe to bude tipuji
"$dir/../../templates/@layout.latte"
.
Ideální je si to dumpnout, ať vidíš, jestli je adresa toho layoutu
správně, nebo ne.
Editoval Šaman (16. 6. 2014 22:57)
- bluray
- Člen | 178
Jo tak jsem udělal pár pokusů a šlo to. já tam dával absolutní url a
nešlo to. nakonec bylo správně to tvoje. dumpnout to právě nešlo, protože
mi to vyhazuje tu header already send…neví někdo jak se týhle chyby zbavit?
kdykoliv si potřebuju něco vypsat tak mi to skončí tady..
Ale jinak to funguje, díky moc
- Šaman
- Člen | 2659
Aha, já skoro nedumpuju, používám barDump()
. Jenom nechápu,
proč nemá zkratku, stejně jako dump()
.
Takže mám tohle v bootstrapu, resp. mám to v souboru který si do
bootstrapu includuju.
<?php
if (!function_exists('barDump')) {
/**
* Tracy\Debugger::barDump() shortcut.
* @tracySkipLocation
*/
function barDump($var, $title = '')
{
$backtrace = debug_backtrace();
$source = (isset($backtrace[1]['class'])) ?
$backtrace[1]['class'] :
basename($backtrace[0]['file']);
$line = $backtrace[0]['line'];
$title .= (empty($title) ? '' : ' – ');
return Tracy\Debugger::barDump($var, $title . $source . ' (' . $line . ')');
}
}
?>
Při dumpování do baru není problém se session, ani s tím, že by se ti to ztratilo třeba při přesměrování.
- Šaman
- Člen | 2659
To mi nedělá. Napadá mě, jestli od toho BasePresenteru nedědíš
ještě další třeba ModuleBasePresenter a od něj SecuredBasePresenter a
teprve od něho konkrétní presenter. Ten si v té funkci zavolá parenta (ten
dumpne), ten zase parenta (taky dumpne), ten parenta (toho původního, co už
nedumpuje) a teprve pak se dumpne ten konkrétní presenter.
Tak tim to nebude, protože i já to mám děděné přes SecuredPresenter.
Editoval Šaman (17. 6. 2014 0:23)