2011-01-27 71 views
4

編輯:: 的問題起因於Zend的路線請更新Zend公司naviagtion沒有工作,由於Zend的路線

我使用xml文件進行導航。

編輯::下面的代碼是從layout.phtml文件

$config = new Zend_Config_Xml(APPLICATION_PATH.'/configs/adminnav.xml', 'nav'); 
$container = new Zend_Navigation($config); 
$this->navigation()->setContainer($container); 
echo $this->navigation(); 

當我在我的編輯頁面,所有沒有任何菜單鏈接。所有得到的都是菜單項上的/ admin/controller/edit/everywhere。任何想法?

我的編輯動作需要id,如果id沒有提供,那麼它會產生錯誤。但是添加和列表法正常工作

最新通報::

<?xml version="1.0"?> 
<config> 
<nav> 
    <home> 
     <label>home</label> 
     <uri>#</uri> 
     <pages> 
      <home> 
       <label>home</label> 
       <module>admin</module> 
       <controller>home</controller> 
       <action>index</action> 
      </home> 
      <help> 
       <label>help</label> 
       <module>admin</module> 
       <controller>home</controller> 
       <action>help</action> 
      </help> 
     </pages> 
    </home> 
    <page> 
     <label>pages</label> 
     <uri>#</uri> 
     <pages> 
      <static> 
       <label>static pages</label> 
       <module>admin</module> 
       <controller>page</controller> 
       <action>index</action> 
      </static> 
      <editpage> 
       <label>static pages</label> 
       <module>admin</module> 
       <controller>page</controller> 
       <action>edit</action>   
      </editpage> 
     </pages> 
    </page> 

    <destination> 
     <label>destinations</label> 
     <uri>#</uri> 
     <pages> 
      <list> 
       <label>list all</label> 
       <module>admin</module> 
       <controller>destination</controller> 
       <action>index</action> 
      </list> 
      <featured> 
       <label>featured</label> 
       <module>admin</module> 
       <controller>destination</controller> 
       <action>featured</action>     
      </featured> 
      <add> 
       <label>add destination</label> 
       <module>admin</module> 
       <controller>destination</controller> 
       <action>add</action> 
      </add> 
      <editdest> 
       <label>edit destination</label> 
       <module>admin</module> 
       <controller>destination</controller> 
       <action>edit</action>   
      </editdest> 
     </pages> 
    </destination> 

    <tours>   
    <label>tours</label> 
     <uri>#</uri> 
     <pages> 
      <list> 
       <label>list tours</label> 
       <module>admin</module> 
       <controller>tour</controller> 
       <action>index</action> 
      </list> 
      <featured> 
       <label>featured tours</label> 
       <module>admin</module> 
       <controller>tour</controller> 
       <action>featured</action> 
      </featured> 
      <add> 
       <label>add tours</label> 
       <module>admin</module> 
       <controller>tour</controller> 
       <action>add</action> 
      </add> 
      <edittour> 
       <label>edit tours</label> 
       <module>admin</module> 
       <controller>tour</controller> 
       <action>add</action> 
      </edittour> 
     </pages> 
    </tours> 

    <hotels>    
    <label>hotels and resort</label> 
     <uri>#</uri> 
     <pages> 
      <list> 
       <label>list hotel</label> 
       <module>admin</module> 
       <controller>hotel</controller> 
       <action>index</action> 
      </list> 
      <add> 
       <label>add hotel</label> 
       <module>admin</module> 
       <controller>hotel</controller> 
       <action>add</action> 
      </add> 
      <edithotel> 
       <label>add hotel</label> 
       <module>admin</module> 
       <controller>hotel</controller> 
       <action>add</action> 
      </edithotel> 
     </pages> 
    </hotels> 

    <message>   
     <label>message</label> 
     <uri>#</uri> 
     <pages> 
      <all> 
       <label>all message</label> 
       <module>admin</module> 
       <controller>message</controller> 
       <action>index</action> 
      </all> 
      <contactus> 
       <label>contact</label> 
       <module>admin</module> 
       <controller>message</controller> 
       <action>contact</action> 
      </contactus> 
      <inquiry> 
       <label>inquiry</label> 
       <module>admin</module> 
       <controller>message</controller> 
       <action>inquiry</action> 
      </inquiry> 
      <reservation> 
       <label>reservation</label> 
       <module>admin</module> 
       <controller>message</controller> 
       <action>reservation</action> 
      </reservation> 
     </pages> 
    </message> 

    <advertisement>   
     <label>advertisement</label> 
     <uri>#</uri> 
     <pages> 
      <list> 
       <label>list ads</label> 
       <module>admin</module> 
       <controller>advertisement</controller> 
       <action>index</action> 
      </list> 
      <add> 
       <label>add ads</label> 
       <module>admin</module> 
       <controller>advertisement</controller> 
       <action>add</action> 
      </add> 
      <editad> 
       <label>edit ads</label> 
       <module>admin</module> 
       <controller>advertisement</controller> 
       <action>edit</action> 
      </editad> 
     </pages> 
    </advertisement> 

    <setting>   
     <label>settings</label> 
     <uri>#</uri> 
     <pages> 
      <view> 
       <label>view</label> 
       <module>admin</module> 
       <controller>setting</controller> 
       <action>view</action> 
      </view> 
      <account> 
       <label>account setting</label> 
       <module>admin</module> 
       <controller>setting</controller> 
       <action>account</action> 
      </account> 
      <site> 
       <label>site setting</label> 
       <module>admin</module> 
       <controller>setting</controller> 
       <action>site</action> 
      </site> 
     </pages> 
    </setting> 
</nav> 
</config> 

更新::對bootstrap.php中編輯行動路線

$frontcontroller = Zend_Controller_Front::getInstance(); 
    $router = $frontcontroller->getRouter('router'); 

    //add route for edit page so that pageid is not displayed in the url 
    $router->addRoute(
     'edit-page', 
     new Zend_Controller_Router_Route('admin/page/edit/:pageid', array(
      'module' => 'admin', 
      'controller' => 'page', 
      'action' => 'edit', 
      'pageid' => 'pageid' 
     )) 
    ); 

更新::菲爾

<editdest> 
    <label>edit destination</label> 
    <module>admin</module> 
    <controller>destination</controller> 
    <action>edit</action> 
    <route>12</route>  
</editdest> 

此錯誤::

Fatal error: Zend_Controller_Router_Exception: Route 12 is not defined in 
/usr/share/php/libzend-framework-php/Zend/View/Helper/Navigation/HelperAbstract.php 
on line 522 
+0

據我瞭解,導航在添加和列表操作中工作,但它僅在編輯操作中不起作用,是的?所有操作(即編輯,列表,添加)的菜單是否相同?您還可以提供其他代碼片段嗎?從你的編輯動作,添加動作(因爲它的作品),你的XML文件。 – Marcin 2011-01-27 15:10:14

+0

向我們展示XML。請格式化您的問題。你爲什麼不使用大寫字母? – takeshin 2011-01-27 19:52:28

+0

@Marcin菜單對於所有操作都是一樣的,它從佈局文件 – 2011-01-28 05:28:54

回答

3

如果涉及到任何靜態路由,則需要在所有導航頁面上設置路由名稱。這是因爲導航視圖助手使用Url視圖助手來創建鏈接。

如果沒有路由名稱存在,則使用當前路由。

如果當前路由是一個靜態路由,它將永遠只解析爲一個URL,無論引發什麼參數。

1

您應該使用您在$router->addRoute中定義的路線。

它應該是:

$router->addRoute(
    'edit-page', 
    new Zend_Controller_Router_Route('admin/page/edit/:pageid', array(
     'module' => 'admin', 
     'controller' => 'destination', 
     'action' => 'edit', 
     'pageid' => 'pageid' 
    )) 
); 


<editdest> 
    <label>edit destination</label> 
    <module>admin</module> 
    <controller>destination</controller> 
    <action>edit</action> 
    <route>edit-page</route> 
    <params> 
     <pageid>12</pageid> 
    </params>  
</editdest> 

如果您需要在每一頁上不同的編輯鏈接,你必須動態地更新導航容器中的參數,可以即:

// (pseudocode, not tested) 
$this->navigation()->getContainer()->findOneByLabel('edit destination')->params->pageid = 12