Управление несколькими макетами с помощью Zend_Layout?

#zend-framework #layout

#zend-framework #макет

Вопрос:

Я пытаюсь реализовать систему шаблонов в zend framework.

Я в основном использую для размещения всех частичных файлов и вариантов шаблонов в одном файле, но по мере увеличения количества шаблонов это становится крайне неуправляемым.

например

 /application/layout/script/template1partial-banner.phtml
/application/layout/script/template1partial-footer.phtml
/application/layout/script/template1variation1.phtml
/application/layout/script/template1variation2.phtml
/application/layout/script/template2variation1.phtml
/application/layout/script/template2variation2.phtml
  

Вы можете видеть, насколько это неуправляемо
, поэтому я хочу управлять им в рамках этой структуры

 /application/layout/script/template1/partial/banner.phtml
/application/layout/script/template1/partial/footer.phtml
/application/layout/script/template1/variation/1.phtml
/application/layout/script/template1/variation/2.phtml

/application/layout/script/template2/partial/banner.phtml
/application/layout/script/template2/partial/footer.phtml
/application/layout/script/template2/variation/1.phtml
/application/layout/script/template2/variation/2.phtml
  

Ну, определение частичных элементов не проблема, вы можете просто использовать $this -> render($this -> getTemplateName()."/partials/banner.phtml");

Это вариации, это основная проблема, которую я использовал $this -> _helper -> layout -> setLayout('template1variation1'); раньше, но для новой вещи я не могу ее использовать сейчас.

Как я могу сделать что-то подобное?

Ответ №1:

Вы также можете определить полный путь в своей layout функции.

 $this->_helper->layout->setLayout('template1/partial/banner');
  

Еще один способ выполнить эту задачу — отключить макет для вашего текущего действия, а затем отобразить его в любой файл phtml. Например, первый disable макет для текущего действия

    $this->_helper->layout->disableLayout();
  

Затем просто отобразите любой HTML-файл следующим образом

       $this->render("complete path to your phmtl file");