2012-05-30 146 views
0

我正在使用「正常」菜單和子菜單的網站上工作。Zend菜單擴展

這是在程序的引導的方法,該方法是resonsible爲導航:

bootstrap.php中

protected function _initNavigation() 
{   
    $view = $this->getResource('view'); 

    $view->addHelperPath(APPLICATION_ROOT . '/library/Pcw/View/Helper/Navigation', 'Pcw_View_Helper_');   

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

    $navigation = new Zend_Navigation($config); 

    $view->navigation($navigation); 

    $menuPartial = array('menu.phtml', 'default');   
    $view->navigation()->menu()->setPartial($menuPartial); 

    $subMenuPartial = array('submenu.phtml', 'default');   
    $view->navigation()->subMenu()->setPartial($subMenuPartial); 
} 

庫/ PCW /視圖/助手/導航/ SubMenu.php

class Pcw_View_Helper_Navigation_SubMenu extends Zend_View_Helper_Navigation_Menu 
{ 
    public function subMenu(Zend_Navigation_Container $container = null) 
    { 
     return parent::menu($container); 
    } 
} 

根據這裏關於Stackoverflow的文檔和主題,這個const亂子應該工作,但下面的錯誤出現:

Fatal error: Uncaught exception 'Zend_Navigation_Exception' with message 'Bad method call: Unknown method Zend_Navigation::subMenu' in /home/prj/domains/prjon.nl/library/Zend/Navigation/Container.php:366 
Stack trace: 
#0 [internal function]: Zend_Navigation_Container->__call('subMenu', Array) 
#1 [internal function]: Zend_Navigation->subMenu() 
#2 /home/prj/domains/prjon.nl/library/Zend/View/Helper/Navigation/HelperAbstract.php(503): call_user_func_array(Array, Array) 
#3 /home/prj/domains/prjon.nl/library/Zend/View/Helper/Navigation.php(132): Zend_View_Helper_Navigation_HelperAbstract->__call('subMenu', Array) 
#4 /home/prj/domains/prjon.nl/Application/Bootstrap.php(410): Zend_View_Helper_Navigation->__call('subMenu', Array) 
#5 /home/prj/domains/prjon.nl/Application/Bootstrap.php(410): Zend_View_Helper_Navigation->subMenu() 
#6 /home/prj/domains/prjon.nl/library/Zend/Application/Bootstrap/BootstrapAbstract.php(669): Bootstrap->_initNavigation() in /home/prj/domains/prjon.nl/library/Zend/Navigation/Container.php on line 366 

的錯誤是明顯的:該方法的子菜單無法被發現和調用,但我已經創建了幫手,負責子菜單的處理..

有誰知道我在做什麼錯?

在此先感謝!

+0

http://stackoverflow.com/questions/2364695/how-do-i-extend-the-zend-navigation-menu-view-helper 在啓動帖子的**解決方案**已幫助我。 –

回答

0

我的插件文件的代碼(ROOT /應用/ SubmenuPlugin.php):

$view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view'); 

$submenuPartial = array('submenus/'.$currentControllerName.'.phtml', 'default'); //$currentControllerName defined a couple of lines ago    

$view->addHelperPath(APPLICATION_ROOT . '/library/Pcw/View/Helper', 'Pcw_View_Helper_'); 
$view->navigation()->submenu()->setPartial($submenuPartial); 

地點子菜單:ROOT /應用/視圖/腳本/子菜單/

地點子菜單視圖助手:ROOT /庫/ PCW /查看/幫手/子菜單。php

這是否幫助你?

1

我只是使用不同的路徑語法,它適用於我的視圖助手,addHelper()應該與導航助手一起工作。

$view->addHelperPath(APPLICATION_ROOT . '/library/Pcw/View/Helper/Navigation', 'Pcw_View_Helper_'); 

變化:

$view->addHelperPath('/../library/Pcw/View/Helper/Navigation', 'Pcw_View_Helper_'); 

作品對我來說,希望能爲你工作爲好。

+0

這真的很奇怪..你的解決方案不適合我......我已經測試過,如果文件被包含在第一行添加一個die並且工作正常.. Pcw_View_Helper_Navigation_SubMenu的構造函數不會被調用.. –

1

這是我這樣做的方式,希望它是有道理的。我遺漏了ACL & Auth集成(這是一個很棒的功能)。

可以說我想要一個帶有「主頁」和「管理員」的頂層菜單,並在「管理」部分有一個子菜單。

在我的引導:

protected function _initNavigation() 
{ 
    $container = new Zend_Navigation(); 

    // or in xml etc 
    $pages = array(
       array('label' => 'Home', 'controller' => 'index', 'action' => 'index'), 
       array('label' => "Admin", 'controller' => 'admin', 'id' => 'admin', 'pages' => array(
         array('label' => "Add an account", 'controller' => 'admin', 'action' => 'createuser'), 
         array('label' => "Clear cache", 'controller' => 'admin', 'action' => 'clearcache') 
         ) 
       ) 
    ); 

    $container->addPages($pages); 

    Zend_Registry::set('Zend_Navigation', $container); 
    return $container; 
} 

然後在我的佈局我顯示主菜單:

$container = Zend_Registry::get('Zend_Navigation'); 
$this->navigation()->menu()->renderMenu($container,array('minDepth' => 0, 'maxDepth' => 0)) 

(檢查文檔的所有renderMenu選項,非常靈活,您可以輕鬆地翻轉與管理子菜單'maxDepth'=> 1)

然後在我的管理模板中,顯示子菜單:

$container = Zend_Registry::get('Zend_Navigation'); 
$found = $container->findById('admin'); 
echo $this->navigation()->menu()->renderMenu($found,array('minDepth' => 0)) 

這樣視圖渲染就與引導分離了,我不需要partials或自定義視圖助手。

+0

不幸的是,這不是我正在尋找..我真的想有一個單獨的函數與自己的partials .. –