2012-04-24 5 views
0

をレンダリング:Zendのナビゲーション - 私は、次のようなXMLファイル内のすべての私のページを定義サブメニュー

<?xml version="1.0" encoding="UTF-8"?> 
<configdata> 
<nav> 
    <dashboard> 
     <label>Dashboard</label> 
     <module>default</module> 
     <controller>dashboard</controller> 
     <action>index</action> 
     <title>Die Schaltzentrale</title> 
    </dashboard> 
    <user> 
     <label>User</label> 
     <module>default</module> 
     <controller>user</controller> 
     <action>index</action> 
     <title>Verwaltung der Benutzer</title> 

     <userList>     
      <module>default</module> 
      <controller>user</controller> 
      <action>index</action> 
      <label>Userliste anzeigen</label> 
     </userList> 
     <newUser> 
      <label>User anlegen</label> 
      <module>default</module> 
      <controller>user</controller> 
      <action>new</action> 
     </newUser> 
     <editUser> 
      <label>User bearbeiten</label> 
      <module>default</module> 
      <controller>user</controller> 
      <action>edit</action> 
     </editUser> 
    </user> 
</nav> 
</configdata> 

私のブートストラップIのセットアップでは私のナビゲーションのように:

protected function _initNavigation() 
    { 
     $this->bootstrap('layout'); 
     $layout = $this->getResource('layout'); 
     $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','nav'); 
     $view = $layout->getView(); 
     $navigation = new Zend_Navigation($config); 
     $view->navigation($navigation); 
     Zend_Registry::set('Zend_Navigation',$navigation); 
    } 

このセットアップは私を可能にしますメインメニューに次の行を表示します。

$partial = array('menu.phtml', 'default'); 
$this->navigation()->menu()->setPartial($partial); 
echo $this->navigation()->menu()->render(); 

これまでのところとても良いです。私の問題は今、特定のサブメニューをレンダリングすることです。たとえば、ユーザコントローラのすべてのアクションを含むメニューをレンダリングしたいとします。私はそれをレンダリングしようとしました:

$page = $this->navigation()->findOneBy('controller','user'); 
echo $this->navigation()->menu()->renderMenu($page); 

出力はありません。また、minDepthまたはmaxDepthオプションを成功させずに設定して出力を取得しようとしました。私の後ろに誰かがいますか、それをどのように働かせることができますか?

答えて

2

あなたのアプローチは非常に近いです。 findOneByラインを変更します。

$page = $this->navigation()->findOneBy('label','User');

これは、ユーザーページの下のすべてのページをフェッチします。

コントローラーでページを見つけることはできないと思います。

[編集]

私は、ユーザーの下にある「ページ」セクションを追加して、XMLを変更しました。これはZend NavigationにuserList、newUser、editUserがユーザのサブページであることを伝えます:

<?xml version="1.0" encoding="UTF-8"?> 
<configdata> 
<nav> 
    <dashboard> 
     <label>Dashboard</label> 
     <module>default</module> 
     <controller>dashboard</controller> 
     <action>index</action> 
     <title>Die Schaltzentrale</title> 
    </dashboard> 
    <user> 
     <label>User</label> 
     <module>default</module> 
     <controller>user</controller> 
     <action>index</action> 
     <title>Verwaltung der Benutzer</title> 
     <pages> 
      <userList> 
       <module>default</module> 
       <controller>user</controller> 
       <action>index</action> 
       <label>Userliste anzeigen</label> 
      </userList>     
      <newUser> 
       <label>User anlegen</label> 
       <module>default</module> 
       <controller>user</controller> 
       <action>new</action> 
      </newUser> 
      <editUser> 
       <label>User bearbeiten</label> 
       <module>default</module> 
       <controller>user</controller> 
       <action>edit</action> 
      </editUser> 
     </pages> 
    </user> 
</nav> 
</configdata> 
+0

あなたの答えに感謝します。私はこのチュートリアル[link](http://www.brandonsavage.net/making-zend_navigation-useful/)でfindOneBy( '​​controller')アプローチを見つけました。コントローラーの代わりにラベルを検索すると、実際に出力が得られます。しかし、私はメインメニューを取得します。 ZendはXML構造を正しく読まないようです。 – Benni

+0

xmlが間違っている可能性があります。私は私の答えを更新しました。修正されたxmlを試してください。 –

+0

あなたの提案で私は出力を得ることができます。しかし、私はまだそれに1つの問題があります。もう2つのページを持つ「デバイス」というコントローラがもう1つあるとします。私のサブメニューをレンダリングすると、深みのあるすべてのページを含むメニューが表示されます。しかし、特定のコントローラによって分離されていません。だから私は、特定のラベルを検索するが、ユーザーとデバイスからのすべてのリンクを持つメニューを取得する。私のXMLにはまだ何か問題があるようです。 – Benni

関連する問題