3

モジュール内からモジュール固有のナビゲーション項目を追加しようとしています。私はこれを完全に間違っているかもしれません。私がこれまでに持っているのは:

config / autoload / Navigation.global.php(これは今のところ機能します)

<?php
return array(
  'navigation' => array(
    'default' => array(
      array(
        'label' => 'Home',
        'route' => 'home',
        'order' => -100,
        'pages' => array(
        ),
      ),
    ),
  ),
);

module / Books / Module.php :(ホームのに「本」ナビゲーションアイテムを追加しようとしています(インラインではありません))

class Module
{
  public function onPreDispatch($e) {
    $pages = array(
      array(
        'label' => 'Books',
        'route' => 'books',
      ),
    );
    $navigation = $e->getParam('application')->getServiceManager()->get('navigation');
    $navigation->findOneByRoute('home')->addPages($pages);
  }
  /* ... */
}

したがって、上記の例(ルートは正しい)では、エラーは発生せず、事前ディスパッチ時にイベントトリガーが発生しますが、ナビゲーションコンテナーには何も追加されません。

私が達成したいのは、次のようなナビゲーションです。

  Home
    |-> Books
    |-> Module2
    |-> etc..
4

1 に答える 1

11

イベントにフックする必要はありません。モジュール固有のナビゲーション構成をモジュールのmodule.config.phpに配置するだけです。すべてのモジュールの構成がマージされ、キャッシュがある場合、多くのモジュールに対してそれを行うと、パフォーマンスの点でより良くなります。

重要なのは、ナビゲーションでアイテムに名前を付けることです。config / autoload / Navigation.global.phpで、ホームアイテムの名前を追加します。

<?php
return array(
    'navigation' => array(
        'default' => array(
            'home' => array(      // <-- name "home" added (name is arbitrary)
                'label' => 'Home',
                'route' => 'home',
                 'order' => -100,
            ),
        ),
    ),
);

次に、module / Books / config/module.config.phpにあります

return array(
    'navigation' => array(
        'default' => array(
            'home' => array(
                'pages' => array(
                    'home/book' => array(   // <-- name is arbitrary
                        'label' => 'Books',
                        'route' => 'books',
                     ),
                 ),   
             ),
         ),
     ),
);

最終的に、両方の構成がマージされ、1つのナビゲーションキーがあります。

return array(
    'navigation' => array(
        'default' => array(
            'home' => array(
                'label' => 'Home',
                'route' => 'home',
                'order' => -100,
                'pages' => array(
                    'home/book' => array(
                        'label' => 'Books',
                        'route' => 'books',
                     ),
                 ),   
             ),
         ),
     ),
);

お役に立てれば :)

ストヤン

于 2013-03-25T09:08:48.410 に答える