2009-10-19 2 views
0

iam не уверен, что iam сделает это правильно. Моя цель состоит в отображении в моем макете входа или навигации в разделе заголовка.Zend_Layout display Вход или Навигация

Моя реализация выглядит следующим образом (без логики):

2 Скрипты макета:

  • login.phtml
  • navigation.phtml

FrontController Плагин:

class Plugin_Header extends Zend_Controller_Plugin_Abstract { 

     /** 
     * PreDispatch 
     * 
     * Decides wich kind of navigation is displayed in header section 
     * for logged in users the menu, for guests the login box and 
     * link to registration form. 
     * 
     * @return void 
     */ 
     public function preDispatch(Zend_Controller_Request_Abstract $request) 
     { 
      $layout = Zend_Layout::getMvcInstance(); 
      $layout->topNavigation = $layout->render('login'); // or navigation 
     } 
} 

Он отлично работает, но это лучший способ? ;)

ответ

1

Я предлагаю добавить функциональность в поле зрения вспомогательного или частичного. Вы сгибая компоновки, как он не должен был быть перегиб, я думаю :)

Я хотел бы сделать это:

  • два парциальных - навигации & логин
  • сделать вид помощника My_View_Helper_RenderHeader() retieving один параметр - boolean $ isLoggedIn
  • на основе логического значения визуализации навигации для $ isLoggedIn = true и логического входа в противном случае.
  • вы можете также добавить какие-то настройки (скажем, для различных названий частичными или другой путь), чтобы сделать этот компонент более многоразовых

Другим положительным является то, что при реализации метода «ToString» вы может хранить логическое значение внутри помощника - настроить его по какой-либо причине для ex. в представлении index.phtml, а затем отобразите его в соответствующем месте в макете, используя echo $this->renderHeader(). Удивительно, не так ли? Если вы не уверены, проверьте код помощника * (сценарий, ссылка, ...).

+0

хорошая идея, спасибо. – opHASnoNAME

+0

Как вы передаете $ isLoggedIn помощнику вида? Iam теперь делает это с плагином в preDispatch ($ layout-> auth = $ auth)? – opHASnoNAME

+0

$ this-> renderHeader (Zend_Auth :: getInstance() -> hasIdentity()) –

0

Я использую различные макеты:

anonymous.phtml 
authenticated.phtml 

И есть это в preDispatch фронт-контроллера плагина() метод:

$auth = Zend_Auth::getInstance(); 
if ($auth->hasIdentity()) { 
    $layout = 'authenticated'; 
} else { 
    $layout = 'anonymous'; 
} 


// Bootstrap layouts 
Zend_Layout::startMvc(array(
'layoutPath' => APPLICATION_PATH . '/layouts/scripts', 
'layout' => $layout 
)); 

Кроме того, я считаю полезным также для проверки Ajax запросов здесь ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') и иметь третий «ajax» (пустой) макет.

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

  • Нет связанных вопросов^_^