我正在尝试在preDispatch插件中为我的视图脚本添加新路径。
我的最终目标是从同一个Zend Framework应用程序运行多个站点,每个站点都有自己的布局和视图脚本。但是,我希望使用默认布局/视图,其中站点没有自己的视图/布局。
我已经让布局正常工作但我无法加载视图脚本。
我的观点文件夹布局如下
/application
/modules
/views
/scripts
/index
index.phtml -> the default index controller view script
/sites
/domingod -> this is a site
/index
/index.phtml -> the sites index controller view script
我想要实现的是加载domingod / index / index.phtml中的索引视图脚本,如果找不到这个文件,我想要渲染默认的index.phtml视图脚本。
到目前为止我已经尝试了这个但没有运气
Zend_Layout::getMvcInstance()->getView()->setScriptPath($viewScriptPath);
这似乎添加了路径,但ZF仍然呈现默认的index.phtml而不是网站(domingod)。
我希望这一切都有道理,非常感谢。
加里
答案 0 :(得分:1)
我想出的解决方案是检查网站是否有视图脚本,如果它已设置为渲染。
class FreedomS_Zend_Controller_Plugin_SetView extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$module = $request->getModuleName();
$controller = $request->getControllerName();
$action = $request->getActionName();
$viewScriptPath = APPLICATION_PATH . '/modules/' . $module . '/views/scripts/sites/' . Zend_Registry::get('siteId') . '/';
$view = Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')->view;
if (file_exists($viewScriptPath . $controller . '/' . $action . '.phtml'))
$view->addScriptPath($viewScriptPath);
}
}
答案 1 :(得分:0)
实际上它总是寻找index / index.phtml。这是基本动作和基本控制器。如果你想实现你的目标,我认为你应该通过一些检查来设置重定向。
$this->_redirect( $this
->view
->url(array('controller' => 'domingod',
'action' => 'index')));
return;
但在我看来,你应该确定你的网站上有什么,不知道你有什么。如果站点不存在,请设置重定向链接,您的网站将作为瑞士时钟。