2012-08-02 4 views
2

Я знаю, как использовать несколько макетов (на каждый контроллер и на каждый модуль).Zend, МНОЖЕСТВЕННЫЕ макеты с общим базовым кодом

У меня есть 5 разноцветных макетов, и они переключаются отлично каждый раз, когда я вызываю diffirent модуль. Но проблема в том, что я вижу, что все они имеют НЕКОТОРУЮ часть общего кода (например, doctype, таблицы стилей и т. Д.).

Вы скажете мне, может ли Zend использовать несколько макетов, но устанавливая для них общий корень? Теперь, если я хочу добавить таблицу стилей, мне нужно изменить 5 разноплановых макетов, что я мог бы сделать лучше.

Заранее спасибо.

ответ

1

Я обычно создаю макет обертку, который отображает содержимое с субкомпоновками.

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

    /приложение /макеты wrapper.phtml /субкомпоновки default.phtml

В wrapper.phtml:

$sublayout = $this->layout()->sublayout ? $this->layout()->sublayout : 'default'; 
echo $this->render('sublayouts/' . $sublayout . '.phtml'); 

В субкомпоновках/default.phtml (добавить что-нибудь):

<?= $this->layout()->content ?> 
+0

Спасибо за ваш ответ! Но где установить переменную SUBLAYOUT? Развертывание макетов - это именно то решение, которое я ищу. Теперь мне нужно показать только подходящую подслою в отношении имени модуля. Ты поможешь? Чтобы сказать вам, теперь выбор правильной компоновки выполняется в функции preDispatch из моего собственного Application_Layout_Controller_Plugin_Layout. – dbq

+0

вы можете установить параметр подслоя в любой точке цепи. – ForrestLyman

+1

также, чтобы уточнить, вы можете получить имя модуля из запроса (который передается вашей функции preDispatch): $ request-> getParam ('module'); – ForrestLyman

0

Есть помощники просмотра, которые используются для этих ситуаций. headScript и headLink.

В ваших макетах все, что вам нужно сделать, это

echo $this->headScript(), $this->headStyle(); 

Тогда в вашей начальной загрузки дополнения:

public function _initScriptsAndStyles() 
{ 
    //get the view object 
    $this->bootstrap('view'); 
    $view = $this->getResource('view'); 

    //add javascript 
    $view->headScript() 
     ->appendFile('/js/your-js.js') 
     ->appendFile('/js/another-js.js'); 

    //add css files 
    $view->headLink() 
     ->appendStylesheet('/styles/basic.css'); 
} 
+0

Извините. Неправильно использовать это при загрузке при работе с модулями. Это не помогает. Мне нужно, чтобы этот код был написан в 5 diffirent бутстрапах, что опять не очень хорошо. Любые предложения? – dbq

+0

Вы поместили бы это в свой файл приложения/bootstrap.php. Это будет загружаться в каждом запросе независимо от модуля. В модульных бутстрапах вы можете сделать то же самое и добавить дополнительные javascript/таблицы стилей. Это самый динамичный подход. Если каждый шаблон содержит одни и те же данные заголовка (название, мета-описание, js, css и т. Д.), Возможно, используя частичный вид? Поместите файл .phtml в папку с частичными представлениями (я называю my _partials), а затем в ваших разных шаблонах 'echo $ this-> partial ('_ partials/header.phtml', 'default', $ this);'. Это немного похоже на Wordpress с использованием 'get_header();' –

+0

О, вышеупомянутый echo указывает папку _partial, которая будет в модуле по умолчанию: 'Application/modules/default/views/scripts/_partials/header.phtml' –

Смежные вопросы