10

の出力を変更する必要がありますZend_View_Helper_Navigation_Menu。変更する必要がある 2 つの関数を見つけ、必要な変更を行う方法を知っています。私が知らないのは、Navigation オブジェクトが Zend の代わりにビュー ヘルパーを使用するようにする方法です。

クラス拡張を表すコード スニペット:

// file /library/My/View/Helper/Navigation/Menu.php
class My_View_Helper_Navigation_Menu extends Zend_View_Helper_Navigation_Menu
{
    protected function _renderDeepestMenu(Zend_Navigation_Container $container,
                                          $ulClass,
                                          $indent,
                                          $minDepth,
                                          $maxDepth)
    {
        // modified code here
    }

    protected function _renderMenu(Zend_Navigation_Container $container,
                                   $ulClass,
                                   $indent,
                                   $minDepth,
                                   $maxDepth,
                                   $onlyActive)
    {
        // modified code here
    }
}

明確にするための編集

<li>要素のクラスを変更しEOL、インデントを削除したいと考えています。メニュー ビュー スクリプトでそれを行うオプションはありません。そのため、これを拡張する必要があります。

Bootstrap でナビゲーション オブジェクトを初期化する:

$navTable = new Default_Model_Site_DbTable_Navigation();
$view = $this->getResource('view');
$view->navigation(new Zend_Navigation($navTable->getNavigation()));

私のレイアウトでメニューをレンダリングする:

echo $this->navigation()->menu();

解決

_Menu次のように名前を変更して機能させましたが、クラスとmenu()関数をオーバーロード/上書きできない理由がわかりません。

  1. クラス名を次のように変更しますMy_View_Helper_Navigation_MyMenu
  2. myMenu関数をクラスに追加します ( return parent::menu($container);)
  3. echo $this->navigation()->myMenu();レイアウトで呼び出す

クラスのワイヤーフレーム:

// file /library/My/View/Helper/Navigation/MyMenu.php
class My_View_Helper_Navigation_MyMenu extends Zend_View_Helper_Navigation_Menu
{
    public function myMenu(Zend_Navigation_Container $container = null)
    {
        return parent::menu($container);
    }

    protected function _renderDeepestMenu(Zend_Navigation_Container $container,
                                          $ulClass,
                                          $indent,
                                          $minDepth,
                                          $maxDepth)
    {
        // modified code here
    }

    protected function _renderMenu(Zend_Navigation_Container $container,
                                   $ulClass,
                                   $indent,
                                   $minDepth,
                                   $maxDepth,
                                   $onlyActive)
    {
        // modified code here
    }
}
4

3 に答える 3

3
   $view->addHelperPath(
      APPLICATION_ROOT . '/library/MyApp/View/Helper/Navigation',
      'MyApp_View_Helper_'
      );


echo $this->navigation()->myMenu(); // name of your class

From: Zend_Navigation メニューを jQuery の FishEye と連携させる

編集

申し訳ありませんが、あなたの解決策を見ていません。まさに私が投稿したものです。

しかし、なぜこれが本当にメニュー クラスの拡張ではないのでしょうか?

于 2010-03-02T18:44:24.870 に答える
0

投稿を編集しましたか?私の答えは今のあなたの質問とはまったく関係がないようです?


何を変える必要があるかを言うと、それは簡単になります。現時点では、あなたの質問は少し混乱しています。

既にナビゲーションを作成した後で、ビューを編集したいと考えています。作成する前にそれを行うことができれば、さらに簡単になります。通常は事前にオプションを変更するため、以下の部分は少し混乱します。

// Get the helper navigation
$navigation = $viewRenderer->
                       view->
                       getHelper( 'navigation' )
                      ->menu()
                      ->renderMenu(
                    $YOUR_NAVIGATION_OBJECT,                                
                    array(  'minDepth' => null,
                        'maxDepth' => null,
                        'onlyActiveBranch' => false,
                        'renderParents'    => false,
                        // More options here


                    )                           

);

くぼみを許してください、ほぼ並べるのが本当に大変でした

上記で $YOUR_NAVIGATION_OBJECT を使用したことに注意してください。ページで複数のナビゲーションを使用する場合にのみ使用します。それ以外の場合は、RenderMenu() の代わりに Render() を使用します。

于 2010-03-02T16:34:47.950 に答える