0

我正在尝试在 preDispatch 插件中为我的视图脚本添加新路径。

我的最终目标是从同一个 Zend Framework 应用程序运行多个站点,每个站点都有自己的布局和视图脚本。但是,我希望在站点没有自己的视图/布局的情况下使用默认布局/视图。

我已经让布局正常工作,但我无法加载视图脚本。

我的views文件夹布局如下

/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) 之一。

我希望这一切都有意义,非常感谢。

加里

4

2 回答 2

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);
        }
}
于 2013-01-06T16:59:12.413 回答
0

实际上它总是寻找 index/index.phtml。这是基本动作和基本控制器。如果你想实现你的目标,我认为你应该在那里设置重定向并进行一些检查。

$this->_redirect(   $this
                            ->view
                            ->url(array('controller' => 'domingod',
                                        'action' => 'index')));
            return;

但是以我的拙见,您应该确定自己的网站上有什么,没有什么。如果站点不必存在,请在此处设置一个重定向链接,您的网站将作为瑞士时钟运行。

于 2013-01-06T12:18:04.000 回答