Feb 09 2009
Zend Framework: nastavení docType v bootstrapu
Nastavení Doctype aplikace v Zend Frameworku pomocí helperu (placeholder helperu) Zend_View_Helper_Doctype je ideální udělat přímo v bootstrapu. Zend si poté automaticky zajistí (pomocí Zend_Registry), že všechny následně vykreslené helpery budou syntakticky správně – tedy přidá potřebné ukončovací lomítko nepárového elementu, je-li třeba (jedná-li se o XHTML).
Příklad kódu v bootstrapu, který zajistí nastavení doctype (hlavně poslední řádek):
...
// Mvc Layout + adresa pro layouty
Zend_Layout::startMvc(array('layoutPath' => '../application/layouts'));
// xhtml sablona layoutu (musi existovat '../application/layouts/xhtml.phtml'!)
Zend_Layout::getMvcInstance()->setLayout('xhtml');
// nastaveni cesty pro scripty view
$view = Zend_Layout::getMvcInstance()->getView();
$view->setScriptPath(array('../application/views/scripts', '.'));
// nastaveni helperu
$view->setHelperPath('../application/views/helpers', 'Jens_View_Helper');
// nastaveni docType pro celou aplikaci
$view->doctype(Zend_View_Helper_Doctype::XHTML1_STRICT);
...
V šabloně ../application/layouts/xhtml.phtml
, si pak přímo na začátek přidáte voláni vykreslení doctype jednoduchý voláním $this->doctype()
bez parametru, a on už bude sám vědět co má vypsat :) Příklad xhtml.phtml
layoutu pak vypadá přibližně takto:
<?=$this->doctype()?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cz" lang="cz"> <?=$this->layout()->header?> <body> <?=$this->layout()->content?> </body> </html>
09.02.2009, 23:21
se divam, ze to mam stejne, ale uplne jinak ;)
$view = new Zend_View; $view->setScriptPath("../application/{$module}/views/scripts");
$view->setHelperPath("../application/{$module}/views/helpers", "{$module}_View_Helper");
$view->doctype('XHTML1_STRICT');
$layout = Zend_Layout::startMvc("../application/{$module}/layouts"); $layout->setView($view); Zend_Registry::set('layout', $layout); Zend_Registry::set('view', $view);
Navíc si pořád nejsem jistý tím jestli není mnohem „nejsprávnější“ nastavit ten DOCTYPE pres
$doctypeHelper = new Zend_View_Helper_Doctype();
$doctypeHelper->doctype('XHTML1_STRICT');
a netahat tak do toho „cizi“ view, ktery s tim samotnym nastavenim nema moc co do cineni, neb diky Zend_Registry jde vpodstate o nastaveni „globalni promenne“.
09.02.2009, 23:37
Nejsprávnější to asi bude, už jen pro to, že to pišou přímo v dokumentaci toho helperu (nicmene i v dokumentaci je mnohdy příklad který už nefuguje – pokud někdy fungoval). Každopádně přístupů bude asi mnohem víc, nemyslím že by některý byl zrovna špatný (dokud se nepřijde na to, že funguje blbě:). Třeba tady je příklad dalšího:
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->initView();
$viewRenderer->view->doctype('XHTML1_TRANSITIONAL');