ZF1将模块视图渲染为通用布局

时间:2013-06-13 08:40:19

标签: zend-framework layout view render partial

我实际上是想在ZF1中创建一个模块,我希望它真的像“插件”一样。主应用程序使用位于data/current/views/layouts下的默认布局。

第一个问题,我的模块,默认情况下使用以下布局application/views/layouts/default.phtml。我想要的是使用另一个(见上文)。所以我这样做了:

public function init() {
    parent::init();
    $layout = Zend_Layout::getMvcInstance();
    $layout->setLayoutPath(DATA_PATH . '/view/layouts');
    $layout->setLayout('common');
}

第二个问题是,在这个布局(data/current/views/layouts)中,我实际上渲染了一些局部视图。但是当我尝试从模块设置布局时,我得到一个错误,因为它无法找到那些部分(因为上下文,它现在正试图从模块上下文加载那些部分)。我不想将这些部分复制到我的模块中以使其工作(脏和不可伸缩)。所以问题是:如何将模块操作(控制器/操作)渲染到公共布局中,但没有任何部分错误?

感谢所有人的帮助

1 个答案:

答案 0 :(得分:0)

下面的

在我的应用程序中工作我是这样配置的。它运作得很好。

protected function _initLayout(){
    $layout = explode('/', $_SERVER['REQUEST_URI']);

    if(in_array('admin', $layout)){
        $layout_dir = 'admin';
    }else if(in_array('default', $layout)){
        $layout_dir = 'default';
    }else{
        $layout_dir = 'default';
    }
      $options = array(
             'layout'     => 'layout',
             'layoutPath' => APPLICATION_PATH."/modules/".$layout_dir."/views/layouts"
      );
    Zend_Layout::startMvc($options);
}

或者如果你想给我们帮助,你也可以尝试

public function init()
{
     $this->_helper->layout->setLayout('front');
}

请告诉我是否可以为您提供更多帮助。