2010-11-08 43 views
1

我正在使用Zend Framework 1.10.8。使用XML文件將URL參數傳遞給Zend_Navigation

我想在我的layout.phtml中創建一個breadcrumb部分。我的菜單中有一些鏈接有動態url參數,如http://mydomain.com/editor/edit/id/42

我試圖弄清楚如何將id = XXX傳遞給Zend_Navigation,而XXX來自數據庫,並且在每個請求中都不相同。

我發現的一個解決方案是添加一個屬性,例如params_id到我的XML聲明:

在CONFIGS

/navigation.xml

<pages> 
    <editor> 
    <label>Editor</label> 
    <controller>editor</controller> 
     <action>edit</action> 
    <params_id>id</params_id> 
    <route>default</route> 
    </editor> 
</pages> 

和在所述控制器通過所述網頁循環和動態添加我的參數ID = 42(而42會從請求對象中檢索最終版本)

$pages = $this->view->navigation()->getContainer()->findAllBy('params_id','id'); 
      foreach ($pages as &$page) { 
       $page->setParams(array(
        'id' => 42, 
        'something_else' => 667 

       )); 
} 

作爲添加動態網址參數似乎是Zend_Navigation我敢肯定,我的解決方案太複雜,太昂貴了這樣一個基本的要求,必須有一個更simplier解決方案「開箱即用」 。

回答

1

這很簡單。只需在您的XML

<pages> 
    <editor> 
     <label>Editor</label> 
     <controller>editor</controller> 
     <action>edit</action> 
     <params> 
      <id>42</id> 
      <someting_else>667</something_else> 
     </params> 
     <route>default</route> 
    </editor> 
</pages> 

寫我這裏是做動態的基於數據庫的數據

首先定義導航加載插件。將文件命名爲Navigation.php,並將其放在application/plugins /目錄中。這裏有這樣的插件的例子:

class Plugin_Navigation extends Zend_Controller_Plugin_Abstract 
{ 
    function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
     $view = Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')->view; 

     //load initial navigation from XML 
     $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','nav'); 
     $container = new Zend_Navigation($config); 

     //get root page 
     $rootPage = $container->findOneBy('sth', 'value'); 

     //get database data 
     $data = Model_Sth::getData(); 

     foreach ($data as $row) { 
      $rootPage->addPage(new Zend_Navigation_Page_Mvc(array(
       'module'  => 'default', 
       'controller' => 'examplecontroller', 
       'action'  => 'exampleaction', 
       'route'  => 'exampleroute', 
       'label'  => $row['some_field'], 
       'params'  => array(
        'param1' => $row['param1'], 
        'param2' => $row['param1'] 
       ) 
      ))); 
     } 

     //pass container to view 
     $view->navigation($container); 
    } 
} 

然後在你的引導初始化這個插件

protected function _initNavigation() { 
    Zend_Controller_Front::getInstance()->registerPlugin(new Plugin_Navigation()); 
} 
+0

... 42和667只是意味着作爲示例導航,這些ID來自數據庫.. – herrjeh42 2010-11-08 11:24:45

+0

然後使用插件動態地添加Zend_Navigation_Page的基於數據庫的數據 – Daimon 2010-11-08 11:28:56

+0

你有一個在線資源手工作爲一個起點如何編寫這個插件? – herrjeh42 2010-11-08 12:07:28

1

更新:我終於結束了扔掉的XML文件。我現在在做什麼:

  • 我寫了這個插件配置我的導航結構陣列的插件(見大門的做法)
  • ,則 動態參數從Zend_Request
  • 檢索
  • 然後我初始化了使用此陣