0

Zend_Navigation を使用してブレッドクラムとメニューを設定する際に問題が発生しています。

まず、XML 構成オブジェクトを使用してページをセットアップします。

<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<nav>
    <home>
        <label>Home</label>
        <controller>Index</controller>
        <action>index</action>
        <id>home</id>
        <resource>default</resource>
    </home>
    <crm>
        <label>CRM</label>
        <module>Crm</module>
        <controller>Index</controller>
        <action>index</action>
        <id>crm</id>
        <resource>Crm</resource>
        <pages>
            <persons>
                <module>Crm</module>
                <label>Personen</label>
                <controller>Persons</controller>
                <action>index</action>
            </persons>
           (...)etc.(...)

次に、私のブートストラップで:

//Bootstrap.php
$view = $layout -> getView();
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$navigation = new Zend_Navigation($config);
$view -> navigation($navigation);
$view -> menu = $view -> navigation() -> menu();
$view -> breadcrumbs = $view -> navigation()->breadcrumbs()->setMinDepth(0);

アクティブな状態に移動するhttp://hostname/Crm/Persons/と、ブレッドクラムも正しく表示されます。

ただし、http://hostname/Crm/Persons/inspect/id/3(inspect がアクションで id がパラメーターである) に移動すると、ブレッドクラムは空になり、アクティブな状態のメニュー項目はありません。予想されるブレッドクラムは次のようなものですHome > CRM > Personen > John。CRM と Personen はメニューでアクティブにする必要があります。

Zend のドキュメントからヒントが得られました。パラメーターが設定されているために機能していない可能性があります。

/*
* Dispatched request:
* - module:     blog
* - controller: post
* - action:     view
*/
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog',
    'params'     => array('id' => null)
));

// returns false, because page requires the id param to be set in the request
$page->isActive(); // returns false

ただし、これを修正する方法がわかりません。考えは非常に高く評価されています。

4

2 に答える 2

0

いくつかの (多くの) いじくり回した後、Zend が構造を認識する前に、XML 内でページを定義する必要があることがわかりました。

<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<nav>
    <home>
        <label>Home</label>
        <controller>Index</controller>
        <action>index</action>
        <id>home</id>
        <resource>default</resource>
    </home>
    <crm>
        <label>CRM</label>
        <module>Crm</module>
        <controller>Index</controller>
        <action>index</action>
        <id>crm</id>
        <resource>Crm</resource>
        <pages>
            <persons>
                <module>Crm</module>
                <label>Personen</label>
                <controller>Persons</controller>
                <action>index</action>
                <pages>
                    <inspect>  <--- this will make Zend recognize the page
                        <module>Crm</module>
                        <label>Persoon</label>
                        <controller>Persons</controller>
                        <action>inspect</action>
                    </inspect>
                </pages>
            </persons>
            (...)etc(...)

検査アクションがメニューに表示されないようにし、最大レンダリング深度を 1 に設定したくないことに注意してください。

$view -> menu = $view -> navigation() -> menu()->setMaxDepth(1);

于 2011-06-07T09:12:42.080 に答える
0

以前に ZF でナビゲーションを設定するために xml ファイルを使用したことがないので、これが機能するかどうかはわかりません。しかし、私の経験に基づいて、次を person タグに追加します。

    <params>
        <id>0</id>
    </params>

この例では、id はデフォルトで 0 に設定されています。

この質問を見る

于 2011-06-06T14:32:57.633 に答える