2009-12-17 31 views
0

可能重複:
Zend Framework - multiplate navigation blocksZend_Navigation:有麻煩麪包屑來渲染使用多個容器

我試圖讓麪包屑在我的應用程序呈現(他們不露面任何地方,甚至不包括主頁,它具有相應的Zend Page Uri對象),其具有多個導航區域 - 主要和實用程序。對於菜單生成,我有一個MenuController我與利用佈局中呈現:

$this->layout()->utility = $this->action('render', 'menu', null, array('menu' => $this->utilityId)); 
$this->layout()->nav = $this->action('render', 'menu', null, array('menu' => $this->mainMenuId)); 

utilityIdmainMenuId性質的數字,從數據庫中抓起。

Menu控制器的render方法只是構建一個數組並創建一個Zend Navigation對象,然後調用setContainer並將其設置爲該容器。這是僞代碼,因爲它比較長:

// MenuController.php 
private function renderAction() { 
    $itemArray[] = array('label' => $label, 'uri' => $uri); // in a loop 
    $container = new Zend_Navigation($itemArray); 
    if ($container instanceof Zend_Navigation_Container) { 
     $this->view->navigation()->setContainer($container); 
     $uri = $this->_request->getPathInfo(); 
     $item = $this->view->navigation()->findByUri($uri); 
     $item->active = true; 
    } 
} 

所以這個render方法在實用程序和nav的佈局中被調用兩次。

編輯: 我認爲這個問題是我需要指定$容器,所以我的代碼將

$this->navigation($container)->breadcrumbs(); 

但是因爲我使用$this->action('render', 'menu')$container變量設置那裏,沒有返回,有沒有一種方法可以用其他方式指定容器?可能使用$this->layout()->nav和指向容器的屬性。

This看起來像它的同一個問題,有人建議設置/獲取他們Zend_Registry,也許我會嘗試了這一點。

回答

0

這可能是一個骯髒的解決方案,但我使用合適的詞彙,像這樣手動設置容器參考:

Zend_Registry::set('nav' . $menu, $container); 

吐出來,像這樣:

$main = Zend_Registry::get('nav' . $this->mainMenuId); 
echo $this->navigation($main)->breadcrumbs()->setMinDepth(0); 
1

我懷疑你沒有導航等級。你需要頁面內的頁面。

例如

Home Page 
[pages] => Sign In 
      [pages] => Forgot Password 
     => Create Account 
      [pages] => Confirm Account Email 
        => Email Confirmed 

通過以上,麪包屑將在除主頁所有活動的頁面,如果你做的呈現......所有頁面這樣的:

$this->navigation()->breadcrumbs()->setMinDepth(0); // don't skip the root page 

或者,也許這是別的東西,但很難說。不過,我希望這會有所幫助!

+0

啊。我沒有層次結構,但如果我指定了setMinDepth(0),它應該至少吐出主頁的麪包屑,對吧?也許我會做一個測試網站,並且有一個層次結構。 – 2009-12-18 17:01:17

0

這可能不是整回答你的需要,但它應該讓你更進一步。

參見:this answer