Mobilní verze – globální nastavení šablon
- Michalek
- Člen | 211
V persistentním parametru mám uloženo, zda jde o subdoménu „www“ nebo „m“, to je v pohodě.
Nějak globálně bych ale pro celou aplikaci chtěl podle toho nastavovat šablony.
Standardní – Default.default.phtml
Mobilní – Default.default.m.phtml
Myslel jsem, že v presenteru nějak získám Default.default.phtml a regulárem do toho vložím „m“, jenže se mi nedaří získat ten název standardní šablony.
$this->template->getFile()
mi nevrací to co jsem čekal
:-(
Jistě, můžu v každé akci udělat
$this->template->setFile('Default.default.m.phtml')
ale je to značně neefektivní :) Nebo na to jdu celkově špatně? Díky za nakopnutí.
- Panda
- Člen | 569
// Doplnění: upraveno podle uvedeného kódu
<?php
class BasePresenter extends Presenter
{
/** @persistent */
public $subdomena;
public function formatLayoutTemplateFiles($presenter, $layout)
{
$appDir = Environment::getVariable('appDir');
$path = '/' . str_replace(':', 'Module/', $presenter);
$pathP = substr_replace($path, '/templates', strrpos($path, '/'), 0);
$m = ($this->subdomena == 'm' ? '.m' : '');
$list = array(
"$appDir$pathP/@$layout$m.phtml",
"$appDir$pathP.@$layout$m.phtml",
);
while (($path = substr($path, 0, strrpos($path, '/'))) !== FALSE) {
$list[] = "$appDir$path/templates/@$layout$m.phtml";
}
return $list;
}
public function formatTemplateFiles($presenter, $view)
{
$appDir = Environment::getVariable('appDir');
$path = '/' . str_replace(':', 'Module/', $presenter);
$pathP = substr_replace($path, '/templates', strrpos($path, '/'), 0);
$path = substr_replace($path, '/templates', strrpos($path, '/'));
$m = ($this->subdomena == 'm' ? '.m' : '');
return array(
"$appDir$pathP/$view$m.phtml",
"$appDir$pathP.$view$m.phtml",
"$appDir$path/@global.$view$m.phtml",
);
}
// ....
}
?>
Editoval Panda (1. 1. 2010 13:20)
- Ondřej Mirtes
- Člen | 1536
A nestačilo by vzít parent::format(Layout)TemplateFiles
a ten
upravit regulárem, než to celé psát znova? :)
- Michalek
- Člen | 211
Popravdě jsem to v BasePresenteru ještě trošku upravil a zatím to vypadá, že to plně splňuje moje představy :) Přepisování funkcí alá Panda se pravděpodobně hodí na nějaké větší vrabce.
if($this->mobile == 'm')
{ // pokud je pristup pres mobilni domenu, nastavime mobilni sablony a layout
$this->setView($this->getView() . '.mobile');
$this->setLayout('layout.mobile');
}
složka templates
@layout.phtml
@layout.mobile.phtml
Default.default.phtml
Default.default.mobile.phtml
- Ondřej Mirtes
- Člen | 1536
Tvoje řešení má nevýhodu v tom, že budeš muset duplikovat metody render* – např. renderDefault a renderDefaultMobile. Tzn. jít cestou překrytí tamtěch metod je správné.