2009-10-19 51 views
0

iam不知道如果我做正確的方式。我的目標是在我的佈局中顯示標題部分的登錄或導航。Zend_Layout顯示登錄或導航

我的實現看起來像這樣(沒有邏輯):

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一個參數 - 布爾$ isLoggedIn
  • 基於布爾值渲染導航爲$ isLoggedIn = true,否則登錄部分。
  • ,你還可以添加一些這種設置(假設爲諧音的不同名稱或不同的路徑),使該組件更可重複使用的

其他積極的事情是,如果你實現「的toString」方法,你可以在幫助器中存儲布爾值 - 由於某種原因將其設置爲ex。在index.phtml視圖中,然後在使用echo $this->renderHeader()的佈局中將其呈現在適當的位置。真棒,不是嗎?如果您不確定,請查看head *(腳本,鏈接,...)幫助程序代碼。

+0

好主意,謝謝。 – opHASnoNAME 2009-10-20 04:19:47

+0

你如何將$ isLoggedIn傳遞給視圖幫助器? Iam現在用preDispatch上的插件($ layout-> auth = $ auth)執行它? – opHASnoNAME 2009-10-20 06:31:19

+0

$ this-> renderHeader(Zend_Auth :: getInstance() - > hasIdentity()) – 2009-10-20 14:14:08

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」(空)佈局。