0

次のように、すべてのページを 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>

私のブートストラップでは、ナビゲーションを次のようにセットアップします。

    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 オプションを設定して出力を取得しようとしましたが、成功しませんでした。どうすればそれを機能させることができますか?

4

1 に答える 1

2

あなたのアプローチは非常に近いです。findOneBy 行を次のように変更します。

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

これにより、User ページの下にあるすべてのページが取得されます。

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

[編集]

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

<?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>
于 2012-04-24T14:11:45.013 に答える