2011-01-19 1 views
2

Я знаю, что & использовал самые основные макеты Zend Framework, где я использовал 1 макет по всему сайту. Но теперь мне нужна более промежуточная/организованная настройка.Как настроить несколько макетов в Zend Framework. Например. Публикация/Вход/Различные комбинации модулей

  • Схема общественного сайта будет иметь div#mainContent занимают целых 12 столбцов (с использованием 960gs)
  • Зарегистрированное сайт будет иметь div#mainContent занимая 9 колонок + боковую панель с 3-мя колоннами
  • На боковой панели вошедшие в месте, различные страницы могут содержать различные модули (не модули Zend Framework в, больше похожи на «коробки/виджеты»)
  • Они будут иметь различное меню нав слишком

Я подумываю использовать 1 базовую компоновку, где 2 дополнительных макета будут «расширяться». Базовая компоновка будет содержать только <html> деклараций headScripts и т. Д. До <body>, тогда подслои будут содержать определения для обертывания divsdiv.grid_12, grid_9, grid_3. Как я могу осуществить это «расширение», в принципе, я просто хочу, чтобы повторно использовать код

Кроме того, Что хороший способ сделать боковую панель коробку/виджеты

ответ

9

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

Вот плагин макет Я использую ...

class App_Layout_Controller_Plugin_Layout extends Zend_Layout_Controller_Plugin_Layout 
{ 

    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     $layout = $this->getLayout(); 
     $filename = $layout->getLayoutPath() . '/' . $request->getModuleName() . '.' . $layout->getViewSuffix(); 

     //check if the layout template exists, if not use the default layout set in application.ini 
     if (file_exists($filename)) 
     { 
      $this->getLayout()->setLayout($request->getModuleName()); 
     } 
    } 

} 

Конечно, вы можете изменить это для собственных нужд.

Убедитесь, что вы создали вы Application.ini правильно тоже в том числе таких элементов, как следующее ...

resources.layout.layout = "default" 
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" 
resources.layout.pluginClass = "App_Layout_Controller_Plugin_Layout" 

В моем случае у меня есть:

default.phtml, admin.phtml, clients.phtml

Я надеюсь, что это помогает ...
Angel

2

То, как мы это делаем, что я не уверен, что это лучший подход, заключается в том, чтобы установить текущий макет внутри метода init(), доступного в каждом контроллере.

Так, например, в случае, если у нас есть этот URL: www.mysite.com/social/

class SocialController extends BaseController 
{ 
    public function init(){ 
     $layout = $this->_helper->layout(); 
     $layout->setLayout('social'); 
    } 
} 

Тогда в config.ini:

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

И есть socia.phtml определяется в пределах ресурсов.layout.layoutPath

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