2010-04-02 65 views
1

第一次來這裏,所以請和我一起裸照。 我不得不面對以下問題,使用zend框架,特別是zend_nav創建一個可通過layout/layout.phtml頁面傳遞的可重用菜單。這些是各自文件中的代碼片段。Zend_Nav在zend框架問題中得到菜單顯示

第一應用程序/ CONFIGS/navigation.xml,

<configdata> 
    <nav>  
     <label>Home</label> 
     <controller>index</controller> 
     <action>index</action> 
     <pages> 
      <add> 
       <label>Add</label> 
       <controller>post</controller> 
       <action>add</action> 
      </add> 
      <login> 
       <label>Admin</label> 
       <controller>login</controller> 
       <action>login</action> 
      </login> 
     </pages>  
    </nav> 
</configdata> 

此然後被傳遞到在bootstrap.php中文件(僅示出具體的方法)的對象

protected function __initNavigation(){ 
    $this->bootstrap('layout'); 
    $layout = $this->getResource('layout'); 
    $view = $layout->getView(); 
    $config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav'); 
    $container = new Zend_Navigation($config); 
    $view->navigation($container); 
} 

和最後在視圖layout.phtml中,對象應該返回菜單

<!-- application/layouts/scripts/layout.phtml --> 
<?php echo $this->doctype() ?> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>   
    <title>Zend Blog !</title> 
    <?php echo $this->headLink()->appendStylesheet('/css/global.css')?> 
</head> 
<body> 
    <div id="header"> 
     <div id="header-logo"> 
      <b>Blog Me !</b> 
     </div> 
    </div> 
    <div id="menu">    
     <?php echo $this->navigation()->menu() ?> 
    </div> 
    <div id="content"> 
    <?php echo $this->layout()->content ?> 
    </div> 
</body> 
</html> 

菜單然而,當我在瀏覽器中啓動我的應用程序時,並沒有顯示出來,但任何想法可能出錯了,都被虛心接受。

在此先感謝卡爾·約翰遜

回答

1

如果沒有兩個_命名功能__initNavigation強調的目的,那麼你可能預期的代碼自動運行。爲了自動運行,你需要使用一個下劃線。

另一個可能的問題是_initNavigation_initView之前運行,因爲Zend按字母順序瀏覽這些資源。但是在這段代碼中你不需要訪問$view。您可以使用Zend_Registry存儲導航容器:

protected function _initNavigation() { 
    $config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav'); 
    $container = new Zend_Navigation($config); 
    Zend_Registry::set('Zend_Navigation', $container); 
} 

Zend_Navigation註冊表項將被默認任何導航幫助沒有指定容器時使用。

1

我覺得你的代碼是正確的,只是你的保護功能__initNavigation() 應該只使用一個__initNavigation()

然後換__initNavigation()_initNavigation()

1

好吧我真的留下深刻的印象,真正快速解答,問題有幾個方面,首先你們兩個都使用一個下劃線標誌是正確的,非常感謝你們兩個! 隨着I T橫空出世,我沒有拼錯,

$config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav'); 

應該是,

$config = new Zend_Config_Xml(APPLICATION_PATH .'/configs/navigation.xml', 'nav'); 

我的錯。最後,在 - 節點內的navigation.xml文件中缺失,應該在每個「頁面」節點周圍有節點,例如家庭。它應該有

<configdata> 
    <nav> 
     <home>  
     <label>Home</label> 
     <controller>index</controller> 
     <action>index</action> 
     </home> 

就是這樣!

再一次,非常感謝您的提示和提示我正確的方向。

Sinc Kalle Johansson