Feb 09 2009

Zend Framework: nastavení docType v bootstrapu

Tag: Zend FrameworkJens @ 12:00

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>

2 komentáře k článku “Zend Framework: nastavení docType v bootstrapu”

  1. Karel napsal:

    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”.

  2. Jens napsal:

    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');