2013-02-12 30 views
6

कि मैं निम्नलिखित नेविगेशन है कहोZend फ्रेमवर्क 2 नेविगेशन उप उप मेनू

Folders 
    New Folder 
Configuration 
    Categories 
    Tags 
    Options 
Contact 

पल मैं, एक सभ्य मेनू हो रही है सभी माता पिता और पहली बच्चे दिखा पर है, तो 'नया' Naviga: इस तरह टयन कभी नहीं दिख रहा है।

हालांकि, अगर मैं पेज पर हूँ 'श्रेणियां' मैं भी उनके बच्चे को दिखाना चाहते हैं, तो नीचे 'श्रेणियां' 'नया' निम्नलिखित की तरह, दिखाया जाना चाहिये:

Folders 
    New Folder 
Configuration 
    Categories 
     New 
    Tags 
    Options 
Contact 

मैं कोशिश करने के कई तरीकों का प्रयास किया है, और सभी विकल्पों की जांच की है (setMinDepth, setMaxDepth, renderSubMenu, setParentMenu) आप succes के बिना layout.phtml में मेनू को दे सकते हैं। यह या तो 'नया' शामिल है, या शामिल नहीं है, बीच में कुछ नहीं है।

जेएफएफ 2 के बारे में प्रलेखन मुझे इस सब मेनू को आंशिक बनाने के अलावा काम करने के तरीके के बारे में कुछ नहीं दे रहा है।

तो, इसके लिए आंशिक एकमात्र विकल्प बना रहा है?

अग्रिम धन्यवाद!

उत्तर

1

कुछ समय पहले एक छोटी परियोजना के लिए, मैंने कुछ वास्तव में त्वरित सुधार के रूप में कुछ बनाया है। हम कोड को साफ करने और इसे कॉन्फ़िगर करने योग्य बनाने की योजना बना रहे हैं, लेकिन हम कभी भी किसी अन्य प्रोजेक्ट पर नहीं जाते हैं जहां हमें इसकी आवश्यकता होती है।

टीएल; डीआर: आप सामान्य जेएफ 2 व्यू सहायक का उपयोग नहीं कर सकते हैं, लेकिन आपको "शीर्ष" स्तर पृष्ठ देखना होगा (आपके मामले में आंतरिक) और उस पृष्ठ के नीचे मेनू प्रदर्शित करें।

<?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); 
     } 
    } 
} 

यह दृश्य सहायक sprintf() कॉल में एक शीर्ष मेनू-आइटम के रूप में "आंतरिक" प्रस्तुत हुई है, लेकिन आप आसानी से इस व्यवहार को बदल सकते हैं। आप बस $html गूंज सकते हैं और फिर यह वास्तव में आपको चाहिए।

+0

धन्यवाद, इससे मदद मिली! :) – Bananam00n

+0

एफवाईआई, मैंने कुछ दिनों पहले इस सहायक को सोफ्लोमो \ कॉमन लाइब्रेरी में शामिल किया था। सुनिश्चित करें कि आप कम से कम 0.3.1 पर भरोसा करते हैं: https://github.com/Soflomo/Common –