Sto leggendo il libro Zend Framework in Action e sono bloccato perchè non riesco a visualizzare correttamente il menù nel layout. Di seguito il codice.
In pratica vorrei capire come sfruttare i placeholders anche nell'utilizzo del layout.
application.ini
Codice PHP:
resources.frontController.plugins.ActionSetup = "Intranet_Controller_Plugin_ActionSetup"
resources.frontController.plugins.ViewSetup = "Intranet_Controller_Plugin_ViewSetup"
library/Intranet/Controller/Plugin/ViewSetup.php
Codice PHP:
class Intranet_Controller_Plugin_ViewSetup extends Zend_Controller_Plugin_Abstract {
protected $_view;
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) {
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->init();
$view = $viewRenderer->view;
$this->_view = $view;
$view->originalModule = $request->getModuleName();
$view->originalController = $request->getControllerName();
$view->originalAction = $request->getActionName();
$view->doctype('XHTML1_STRICT');
$prefix = 'Intranet_View_Helper';
$dir = dirname(__FILE__).'/../../View/Helper';
$view->addHelperPath($dir, $prefix);
}
}
layouts/scripts/layout.phtml
Codice PHP:
...
<?php $this->layout()->menu; ?>
...
application/modules/default/controllers/IndexController.php
Codice PHP:
class IndexController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
}
public function indexAction()
{
// action body
}
public function menuAction()
{
$mainMenu = array(
array('title'=>'Home','url'=>$this->view->url(array(), null, true)),
array('title'=>'Places','url'=>$this->view->url(array('controller'=>'place','action'=>'browse'), null, true)),
array('title'=>'Articles','url'=>$this->view->url(array('controller'=>'articles'), null, true))
);
$this->view->menu = $mainMenu;
$this->_helper->viewRenderer->setResponseSegment('menu');
}
}
library/Intranet/Controller/Plugin/ActionSetup.php
Codice PHP:
class Intranet_Controller_Plugin_ActionSetup extends Zend_Controller_Plugin_Abstract {
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) {
$front = Zend_Controller_Front::getInstance();
if(!$front->hasPlugin('Zend_Controller_Plugin_ActionStack')) {
$actionStack = new Zend_Controller_Plugin_ActionStack();
$front->registerPlugin($actionStack);
} else {
$actionStack = $front->getPlugin('Zend_Controller_Plugin_ActionStack');
}
$menuAction = clone($request);
$menuAction->setActionName('menu')->setControllerName('index');
$actionStack->pushStack($menuAction);
}
}