2013-02-12 30 views
6

Aşağıdaki navigasyon olduğunu söyleZend Framework 2 Navigasyon Alt Alt menü

Folders 
    New Folder 
Configuration 
    Categories 
    Tags 
    Options 
Contact 
Ben, iyi bir menü alma velilerimize ve ilk çocuk herkesin gösteriyorum anda

, böylece 'Yeni' Naviga: böyle tion asla gösterilmez.

Ancak sayfa kullanıyorsam, 'Kategoriler' Ben de onların çocuk herkesin göstermek istiyorum, bu yüzden 'Kategoriler' altındaki 'Yeni' Aşağıdaki gibi göstermesi gerektiğini:

Folders 
    New Folder 
Configuration 
    Categories 
     New 
    Tags 
    Options 
Contact 

I Bunu denemek için birçok yolu denedim ve layout.phtml menüsünde menüye verebileceğin tüm seçenekleri (setMinDepth, setMaxDepth, renderSubMenu, setParentMenu) kontrol et. İçerisinde 'Yeni' var ya da dahil değil, aralarında bir şey yok.

ZF2 ile ilgili dokümantasyon, bu alt menünün nasıl çalıştığı hakkında kısmi bir açıklama yapmaktan başka bir şey vermiyor.

Yani, bunun için tek seçenek kısmi yapıyor mu?

Şimdiden teşekkürler!

cevap

1

Bir süre önce küçük bir proje için, gerçekten hızlı bir düzeltme yaptık. Kodu temizlemeyi ve onu yapılandırmayı planlıyorduk, ama aynı şeyi istediğimiz başka bir projeye asla ulaşamıyoruz.

TL; DR: Normal zf2 görünümü yardımcılarını kullanamazsınız, ancak görüntülemek istediğiniz "en üst düzey" sayfalara bakmanız gerekir (sizin durumunuzdaki dahili) ve bu sayfanın altındaki menüyü görüntüler.

<?php 

namespace Application\View\Helper; 

use Zend\View\Helper\AbstractHelper; 

class SubNavigation extends AbstractHelper 
{ 
    public function __invoke($class = null) 
    { 
     $view = $this->getView(); 
     $menu = $view->navigation()->menu(); 

     $container = $view->navigation()->getContainer(); 
     $active = $view->navigation()->setRenderInvisible(true)->findActive($container); 

     if (!$active) { 
      return; 
     } 

     $container = $active['page']; 
     $depth  = $active['depth']; 

     while (0 !== $depth) { 
      $container = $container->getParent(); 
      $depth--; 
     } 

     $visible = $container->isVisible(); 
     $html = $menu->setContainer($container->setVisible(true)) 
         ->setUlClass('') 
         ->setOnlyActiveBranch(false) 
         ->setMinDepth(null) 
         ->setMaxDepth(null) 
         ->render(); 

     $container->setVisible($visible); 

     if (strlen($html)) { 
      return sprintf('<ul %s><li%s><a href="%s">%s</a>%s</li></ul>', 
        (null !== $class) ? ' class="' . $class . '"' : null, 
        ($container->isActive())? ' class="active"' : null, 
        $container->getHref(), 
        $container->getLabel(), 
        $html); 
     } 
    } 
} 

Bu görüş yardımcı sprintf() çağrısında bir üst menü öğesi olarak "Dahili" vermektedir, ancak kolayca bu davranışı değiştirebilir. Sadece $html'u ekleyebilir ve gerçekten ihtiyacınız olan şey olabilir.

+0

Teşekkürler, bu yardımcı oldu! :) – Bananam00n

+0

FYI, birkaç gün önce bu yardımcısı Soflomo \ Common kütüphanesine dahil oldum. En az 0,3 değerine güvendiğinizden emin olun: https://github.com/Soflomo/Common –