1

Zendフレームワーク、特にzend_navを使用して、layout/layout.phtmlページを介して渡される再利用可能なメニューを作成するという、次の問題があります。これらは、それぞれのファイル内のコード フラグメントです。

まず、application/configs/navigation.xml で、

<configdata>
    <nav>      
         <label>Home</label>
         <controller>index</controller>
         <action>index</action>
         <pages>
             <add>
                 <label>Add</label>
                 <controller>post</controller>
                 <action>add</action>
             </add>
             <login>
                 <label>Admin</label>
                 <controller>login</controller>
                 <action>login</action>
             </login>
         </pages>     
     </nav>
 </configdata>

これは、Bootstrap.php ファイルのオブジェクトに渡されます (その特定のメソッドのみを表示します)。

protected function __initNavigation(){
    $this->bootstrap('layout');
    $layout = $this->getResource('layout');
    $view = $layout->getView();
    $config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav');
    $container = new Zend_Navigation($config);
    $view->navigation($container);
}

最後にビューlayout.phtmlで、オブジェクトはメニューを返す必要があります

 <!-- application/layouts/scripts/layout.phtml -->
<?php echo $this->doctype() ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>        
    <title>Zend Blog !</title>
    <?php echo $this->headLink()->appendStylesheet('/css/global.css')?>
</head>
<body>
    <div id="header">
        <div id="header-logo">
            <b>Blog Me !</b>
        </div>
    </div>
    <div id="menu">            
        <?php echo $this->navigation()->menu() ?>
    </div>
    <div id="content">
    <?php echo $this->layout()->content ?>
    </div>
</body>
</html>

しかし、ブラウザでアプリを起動するとメニューが表示されません。

4

3 に答える 3

1

__initNavigation意図的に2つのアンダースコアを使用して関数に名前を付けなかった場合は_、コードが自動的に実行されることを期待している可能性があります。自動的に実行するには、単一のアンダースコアを使用する必要があります。

もう1つの考えられる問題は、Zendがこれらのリソースをアルファベット順に通過する_initNavigation前に実行されることです。ただし、このコードで_initViewアクセスする必要はありません。$viewを使用しZend_Registryて、ナビゲーションコンテナを保存できます。

protected function _initNavigation() {
    $config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav');
    $container = new Zend_Navigation($config);
    Zend_Registry::set('Zend_Navigation', $container);
}

レジストリエントリは、Zend_Navigationコンテナが指定されていない場合、ナビゲーションヘルパーによってデフォルトで使用されます。

于 2010-04-02T16:55:52.547 に答える
1

あなたのコードは正しいと思います.保護された関数__initNavigation() だけ_があなたの_initNavigation()

次に、に変更__initNavigation()します_initNavigation()

于 2010-04-02T16:59:07.313 に答える
1

感銘を受けました。本当に素早い回答です。問題にはいくつかの側面がありました。最初に、単一のアンダースコア記号を使用することについて両方とも正しかったです。お二人に感謝します。そして、結局のところ、私はスペルを間違えました。

$config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav');

あるべきです、

$config = new Zend_Config_Xml(APPLICATION_PATH .'/configs/navigation.xml', 'nav');

私のせいです。そして最後に、navigation.xml ファイルの - ノード内にミスがあります。たとえば、ホーム用の各「ページ」ノードを囲むノードがあるはずです。それは持っているべきです

   <configdata>
     <nav> 
      <home>     
       <label>Home</label>
        <controller>index</controller>
        <action>index</action>
      </home>

それだけでした!

繰り返しますが、正しい方向へのヒントとヒントをありがとうございます。

シンク・カッレ・ヨハンソン

于 2010-04-02T19:37:13.753 に答える