Graham Anderson posted an useful workaround for the module specific layout problem;
The default layout plugin will accept a stack of paths in LIFO order.
This allows a very simple hack to always ensure that any module can have it’s own default layout which will automatically override the default module layout.
class App_Controller_Plugin_Layout extends Zend_Controller_Plugin_Layout {
public function __construct ($layout = null)
{
parent::__construct ($layout);
}
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
// Insert current module layout dir to to overide any default layouts
if ( $request->getModuleName() != 'default' ) {
$layoutPath = APPLICATION_PATH . '/modules/' .
$request->getModuleName() . '/views/layouts';
$paths = array();
$paths[] = $this->getLayout()->getViewScriptPath();
$paths[] = $layoutPath;
$this->getLayout()->setViewScriptPath($paths);
}
}
}
Asssuming you set the following application config value:
resources.layout.layout = "default"
Now any module with a default.phtml layout will override the default module layout.
e.g APPLICATION_PATH/modules/foobar/views/layouts/default.phtml
Cheers the noo,
Graham
One Reply to “Zend Framework: Module Specific Layout Plugin”