Automatický {extend} v nových šablonách a setLayout()
- Patrik Votoček
- Člen | 2221
Nové šablony jsou super nenutnost psát
{extends}
je super až do chvíle kdy chcete ve všech souborech
používat místo {extends '@layout.phtml'}
{extends '@layout.frontend.phtml'}
jelikož všechny presentery
frontendu dědí od BasePresenter
u a backendu od
BackendBasePresenter
. Tak by se to dalo řešit že prostě nekde
nastavím $layout
. Třeba:
class BasePresenter extends Presenter
{
protected function createTemplate()
{
$template = parent::createTemplate();
$template->layout = "@layout.frontend.phtml";
//nebo
$template->setLayout("@layout.frontend.phtml");
return $template;
}
}
class BackendBasePresenter extends BasePresenter
{
protected function createTemplate()
{
$template = parent::createTemplate();
$template->layout = "@layout.backend.phtml";
//nebo
$template->setLayout("@layout.backend.phtml");
return $template;
}
}
Ale to bohužel nejde… :-( Musím to tedy řešit takto:
class BasePresenter extends Presenter
{
protected function createTemplate()
{
$template = parent::createTemplate();
$template->Xlayout = "@layout.frontend.phtml";
return $template;
}
}
class BackendBasePresenter extends BasePresenter
{
protected function createTemplate()
{
$template = parent::createTemplate();
$template->Xlayout = "@layout.backend.phtml";
return $template;
}
}
a v šabloně uvádět {exteds $Xlayout}
. Což není tak
pohodlné. A tak se ptám dá se to řešit elegantněji bez toho abych musel
v každé šabloně mít {extends ...}
? Nebo nešlo by to něják
dodělat? Případně jakou třídu podědit a jakou metodu upravit abych
docílil tohoto chování? Aneb místo automatického vkládání
{extends '@layout.phtml'}
(tím pádem nenutnosti psát to do
šablony) mít {extends $layout}
a proměnou $layout
defaultně nastavenou na '@layout.phtml'.???
- vlki
- Člen | 218
Hm, přijde mi, že na to jdeš strašně složitě. Nestačí pouze těm Presenterům nastavit správně ten layout? Nějak takto?
class BasePresenter extends Presenter
{
protected function startup()
{
$this->setLayout('layout.frontend');
}
}
class BackendBasePresenter extends BasePresenter
{
protected function startup()
{
$this->setLayout('layout.backend');
}
}
Poznámka: Layout se nenastavuje jako jméno souboru, ale jen jakýsi kořen jména, který je prefixován zavináčem a postfixován příponou .phtml.
- Patrik Votoček
- Člen | 2221
vlki napsal(a):
Hm, přijde mi, že na to jdeš strašně složitě. Nestačí pouze těm Presenterům nastavit správně ten layout? Nějak takto?
Asi jo… Teď jsem to zkoušel a funguje to… Problém byl v tom že já mám ty @layout.....phtml v úplně jiné složce.
Poznámka: Layout se nenastavuje jako jméno souboru, ale jen jakýsi kořen jména, který je prefixován zavináčem a postfixován příponou .phtml.
Na tohle sem zapoměl to byl taky ten problém proč mě to nešlo…
THX!
- vlki
- Člen | 218
Jsem rád, že to tak rychle nakoplo:)
Problém byl v tom že já mám ty @layout.....phtml v úplně jiné složce.
Tak to by ti zas mělo posloužit překrytí metody
formatLayoutTemplateFiles
. Pokud máš jedno jediné úložiště
layoutů, mohlo by to být dokonce i rychlejší než řešení, které teď
formatLayoutTemplateFiles
poskytuje ;)
- Patrik Votoček
- Člen | 2221
formatLayoutTemplateFiles
mám předělané už nějáký čas
takže to pro mě byla otázka dopsání jednoho teda vlastně dvou řádku.
A už to funguje. Moje řešení template-u je trochu složitější (třeba
jednou pochopíš..... – prosím zatím neřeš jak a kdy)