Nasıl Zend Navigasyon Menü Görünümü Yardımcısı uzatır mı?

3 Cevap php

I Zend_View_Helper_Navigation_Menu çıkışını değiştirmek gerekir. Ben değiştirmeniz gerekir iki işlevi buldum, ve ben gereken değişiklikleri yapmak için biliyorum. Ne bilmiyorum Navigasyon nesne yerine Zend biri bence yardımcıyı kullanın nasıl olduğunu.

Benim sınıf uzantısını temsil eden kod parçacığı:

// 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
    }
}

Edits to Clarify

Ben <li> elemanlarının sınıfını değiştirmek ve EOL ve girinti kaldırmak istiyorum. Bunu uzatmak gerekecek neden menü görünümü script ile bunu yapmak için hiçbir seçenek vardır.

Benim Bootstrap navigasyon nesnesi başlatma:

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

Benim düzeninde menü Rendering:

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

Solution

Ben aşağıdaki gibi şeyleri adlandırarak çalışma var, ama ben _Menu sınıf ve menu() fonksiyonu üzerine yazmak / yüklenmeyin neden net değilim.

  1. My_View_Helper_Navigation_MyMenu için sınıf adını değiştirin
  2. Sınıfa myMenu fonksiyonu ekleyin (return parent::menu($container);)
  3. Düzeninde echo $this->navigation()->myMenu(); Çağrı

Sınıf tel kafes:

// 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
    }
}

3 Cevap

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


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

Gönderen: http://stackoverflow.com/questions/1243697/getting-zend-navigation-menu-to-work-with-jquerys-fisheye/1816494#1816494

EDIT

Üzgünüm senin çözüm görmedim, ben gönderdiniz tam olarak ne olduğunu.

Ama neden bu menü sınıfın trully uzantısı değil mi?

Bir cevap gerekebilir herkes için daha iyi bir yol ve muhtemelen amaçlanan yolunu buldu.

Yapmak var tek şey 'Zend_View_Helper_Navigation_HelperAbstract' ve kendi navigasyon görünümü yardımcısı için belirlenen varsayılan proxy uzanan kendi özel bakış yardımcısı oluşturmaktır.

Örneğin

class Admin_View_Helper_NavigationMenu extends
                                     Zend_View_Helper_Navigation_HelperAbstract {

    public function render(\Zend_Navigation_Container $container = null) {
        return "Hello world!!";
    }

}

ve

$this->view->navigation()->setDefaultProxy("navigationMenu");

(Bu eylem yığınına eklenmiş gibi ben, menü denetleyicisi eylem varsayılan proxy değiştirme am)

Bunu yaptıktan sonra, bu görünümde bu kullanmak mümkün olacak

<?= $this->navigation()->render(); ?>

Note: You still have to rename the view helper class, but that's how view helpers work in Zend (Names are not supposed to collide).

Benim cevabım şimdi soruya tamamen alakasız gibi did you edit your post? görünüyor?


Eğer değiştirmek gerekiyor derseniz daha kolay olacaktır. Şu anda soru biraz kafa karıştırıcı.

Ben size already navigasyonu oluşturduktan sonra görünümünü düzenlemek istiyorsanız kabul ettik. Bunu yapmak mümkün olup olmadığını before sonra da daha kolay oluşturun. Normalde elden önce seçeneklerini değiştirmek çünkü aşağıda bu biraz biraz kafa karıştırıcı.

// 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


                    )                           

);

excuse the indentation, it was really hard to get it lined nearly

Yukarıda $ YOUR_NAVIGATION_OBJECT kullanılan fark. Sadece kullanmak sayfanızda birden fazla Navigasyon kullanırsanız. Aksi takdirde, jus) yerine RenderMenu (of () Render kullanın.