Zend Framework - использовать общий заголовок для различных действий в контроллере? - PullRequest
1 голос
/ 21 февраля 2011

Я попытался прочитать вопрос, найденный ЗДЕСЬ: Конфигурация модуля и конфигурация макета в 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 & Second Controller совместно используют заголовок
  2. FirstController - indexAction и browseAction совместно используют дополнительный заголовок
  3. Третий контроллер - имеет собственный заголовок или, возможно, «без заголовка» (для ajax)

Как есть, я получаю огромную репликацию в файле view/script/<actionname>.phtml http://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 Ответ

2 голосов
/ 22 февраля 2011

Да, вы правильно поняли,

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

Следует отобразить страницу с другим макетом и просто вывести содержимое представлений в макете () -> заполнитель содержимого.

Другой способ состоит в том, чтобы иметь один макет и использовать партиалы для загрузки различных заголовков.

В вашем действии вы могли бы иметь

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

Тогда в вашем макете вы можете просто сделать это

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

Вероятно, это слишком.

...