Zend Framework - 在控制器中使用通用标头来执行不同的操作?

时间:2011-02-21 20:33:42

标签: zend-framework zend-layout

我试过阅读这里发现的问题:Module configuration and layout configuration in zend framework它被描述为我需要知道的关于布局的一切 - 但是 - 我担心我发现它有点难以理解。

我有很多Zend控制器:

class FirstController extends Zend_Controller_Action {
   public function init()        { /* stuff */ } 
   public function indexAction() { /* stuff */ } 
   public function indexBrowse() { /* stuff */ } 
}

class SecondController extends Zend_Controller_Action {
    // stuff   
}

class ThirdController extends Zend_Controller_Action {
    // stuff
}

我需要他们进行以下安排。

  1. FirstController&第二个控制器共享标题
  2. FirstController - indexAction和browseAction共享一个额外的标题
  3. 第三控制器 - 拥有它自己的标题或可能“无标题”(对于ajax)
  4. 按照目前的情况,我在view/script/<actionname>.phtmlhttp://framework.zend.com/manual/en/zend.layout.quickstart.html

    中获得了巨大的复制权

    有更多信息,但我无法找到将这一切带回家的关键信息。

    从上面的第一个文档中我猜测以下内容会进入我的application.ini文件

     resources.layout.layout = "layout"
     resources.layout.layoutPath = APPLICATION_PATH "/layouts"
    

    但我希望创建一个名为“Layouts”的文件夹,还是应该使用某种views/common文件夹?该文件是否被称为layout.php

    然后,在layout.php我内部,我正确理解

        <div id="content"><?php echo $this->layout()->content ?></div>
    

    会呈现单个操作的PHTML文件吗?和

       public function anotherAction() {
            $this->_helper->layout->setLayout('foobaz');
       }
    

    是否会使整个操作使用不同的布局文件(布局文件夹中的一个名为'foobaz.php')?

    感谢您抽出时间为我解决这个问题。

1 个答案:

答案 0 :(得分:2)

是的,你没事,

 $this->_helper->layout->setLayout('foobaz');

应该使用不同的布局呈现页面,只需在layout() - &gt;内容占位符中输出视图内容。

另一种方式是使用单一布局,并使用partials来加载不同的标头。

在你的行动中你可以拥有

 public function indexAction() { 
       $layout = $this->_helper->layout();
       $layout->assign('header', 'header_file_name');
}

然后在你的布局中你可以这样做

   <div id="header">
       <?php echo $this->partial($this->layout()->header);?>
 </div>

这可能是最重要的。