2009-08-07 7 views
8

के साथ काम करने के लिए Zend_Navigation मेनू प्राप्त करना मैं अपने मेनू को बनाने के लिए Zend_Navigation (ढांचे के लिए मीठा जोड़ा, बीटीडब्ल्यू) का उपयोग कर रहा हूं, जिसके बाद इसे पृष्ठ में (स्वयं स्पष्ट रूप से) प्रस्तुत किया जाना चाहिए। मैं पहली बार नियंत्रक में कहीं कंटेनर सेट:jQuery के फिशिए

// $pages is the array containing all page information 
$nav = new Zend_Navigation($pages); 
$this->view->navigation($nav); 

फिर, लेआउट में, इसे इस तरह दिया जाता है:

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

जो पूरी तरह से काम करता है। अब: मैं चाहता हूं कि मेनू थोड़ा अलग हो। मैक-जैसे डॉक-मेन्यू बनाने के लिए मैं जिस पेज का निर्माण कर रहा हूं वह jQuery Fisheye-plugin का उपयोग करता है। हालांकि, इस प्लगइन एक विशिष्ट मार्कअप ...

वास्तव में, यह <a> एक <span> (टूलटिप के लिए) से युक्त, दोनों ने एक <img> (आइकन के लिए) और की एक सूची लेता है की जरूरत है। मानक मेनू व्यू हेल्पर लिंक टेक्स्ट के रूप में 'label' पैरामीटर के साथ, एक अनियंत्रित सूची (तार्किक रूप से) के अंदर सबकुछ प्रस्तुत करता है।

ऐसा लगता है कि प्रतिपादन से पहले 'label' पैरामीटर से गुजरने वाली सामग्री से बच निकला है, इसलिए एचटीएमएल डालने से मुझे कोई अच्छा काम नहीं होगा। इसके अतिरिक्त, फिशिए आमतौर पर <li> टैग में लिखे गए सामान को <ul></ul> में लिपटे पूरे सामान के साथ नहीं लेते हैं, लेकिन <a> तत्वों की केवल एक-स्तर की सूची के साथ।

मैं गोदी, जो <img> और <span> डालने की देखभाल करने में सक्षम होगा के लिए एक कस्टम दृश्य सहायक लिखने के बारे में सोच रहा था, लेकिन मैं एक बहुत ही मुश्किल समय एक कस्टम दृश्य नेविगेशन से जुड़ी सहायक हो रही हो रही है कक्षा। मैं बस यह नहीं समझ सकता कि इसे कहां रखा जाए और किस तरह से, भले ही मेरे सभी अन्य कस्टम वर्ग (मॉडल और ऐसे) को ऑटोलोडर द्वारा सावधानी से देखभाल की जाती है। इस पर कोई विचार?

फिर फिर भी, अगर मैं इस दृश्य को काम करने के लिए सहायक महसूस कर सकता हूं, तो भी मुझे HTML अनियंत्रित सूची के साथ छोड़ दिया गया है - मुझे पता है कि मैं इसे कस्टम व्यू हेल्पर का उपयोग करके भी खो सकता हूं, लेकिन मैं हमेशा एक रहा हूं अर्थशास्त्र के लिए, एक सूची के अंदर मुख्य नेविगेशन मेनू युक्त प्रशंसक।

यदि कोई मुझे थोड़ा सा मदद कर सकता है, तो मैं इसकी सराहना करता हूं। यदि फिशिए सिर्फ <ul> के साथ काम करने के लिए नहीं है, तो यह बहुत बुरा होगा ... क्या इस मामले में Zend_Navigation को पूरी तरह से खोने का एक अच्छा कारण होगा?

उत्तर

25

मैंने कस्टम रेंडरर बनाने के मामले में अभी तक रास्ता नहीं देखा है।

सबसे पहले, के बजाय डिफ़ॉल्ट मेनू() कॉल प्रतिपादन, एक आंशिक में प्रस्तुत करने के लिए बनाने के लिए::

// menu.phtml is partial, cms is module 
$partial = array('menu.phtml', 'cms'); 
$this->navigation()->menu()->setPartial($partial); 
echo $this->navigation()->menu()->render(); 

तब (डॉक्स से), आप एक बना सकते हैं "यहाँ है कि मैं क्या कर रही है, हालांकि समाप्त हो गया है कस्टम "इसलिए की तरह प्रस्तुत करना:

// -- inside menu.phtml 
foreach ($this->container as $page) 
{ 
    // this just prints a "<a>" or "<span>" tag 
    // depending on whether the page has a uri 
    echo $this->menu()->htmlify($page), PHP_EOL; 
} 

मैं इस स्क्रिप्ट के साथ कर रही है कि मैं क्या मूल रूप से (सबमेनू में से एक स्तर के साथ एक मेनू) था समाप्त हो गया:

// -- another menu.phtml 
<ul class="navigation"> 

<?php 

$html = array(); 

foreach ($this->container as $page) 
{ 
    $html[] = "<li>"; 
    $html[] = $this->menu()->htmlify($page) . PHP_EOL; 

    if (!empty($page->pages)) 
    { 
     $html[] = "<ul>"; 
     foreach ($page->pages as $subpage) 
     { 
      $html[] = "<li>"; 
      if ($href = $subpage->getHref()) $html[] = "<a href=\"{$href}\">"; 
      else $html[] = "<span>"; 
      $html[] = "<img src=\"/ui/cms/img/icons/edit.png\" alt=\"\"/>"; 
      $html[] = $subpage->getLabel(); 
      if ($href) $html[] = "</a>"; 
      else $html[] = "</span>";    
      $html[] = "</li>"; 
     } 
     $html[] = "</ul>"; 
    } 

    $html[] = "</li>"; 
} 

echo join(PHP_EOL, $html); 

?> 
</ul> 

आप आंशिक रूप से मार्कअप को बदल सकते हैं और वहां अपनी छवियां/आइकन जोड़ सकते हैं।

+1

वाह, सही उत्तर। ऐसा लगता है कि ज़ेंड_नविगेशन पर अभी भी कुछ काम है, लेकिन यह मुझे मिलेगा जहां मुझे जाना है। धन्यवाद! – JorenB

+1

@JorenB बस इतना ही आप जानते हैं, मैंने मैथ्यू पी। (जेडएफ पर लीड देव) से पूछा कि क्या वे किसी भी समय नेविगेशन के लिए सजावटी शामिल करेंगे। उन्होंने कहा (संक्षेप में) "योजनाबद्ध नहीं है क्योंकि आंशिक लोगों के पास बहुत कम उपर है और सजावटी समुदाय द्वारा प्यार नहीं करते हैं" .. ऐसा लगता है जैसे ज़ेंड_नाव अपने आप पर काफी प्रदर्शन कर रहा है। – typeoneerror

+0

मैंने कोशिश की लेकिन कंटेनर खाली है ... ऑब्जेक्ट (ज़ेंड \ नेविगेशन \ नेविगेशन) # 50 9 (3) { ["पेज": संरक्षित] => सरणी (0) { } ["अनुक्रमणिका": संरक्षित ] => सरणी (0) { } ["गंदे इंडेक्स": संरक्षित] => बूल (झूठा) } – cwhisperer

7

क्षमा करें, पिछले पोस्ट

पर स्वरूपण मुद्दा अपने कस्टम सहायक को जोड़ने के लिए के लिए निम्न कार्य, अपने बूटस्ट्रैप में:

protected function _initNavigation() 
{ 
    $this->bootstrap('view');   // make sure we have a view 
    $view = $this->getResource('view');  // get the view resource 
    $config = new Zend_Config_Xml(APPLICATION_ROOT . '/config/navigation.xml','nav'); 
    $container = new Zend_Navigation($config); 
    $view->navigation($container); 

    // Tell Zend were it can find your custom helpers and what 
    // the prefix is going to be. 

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

} 

अगला अपने कस्टम दृश्य सहायक बना सकते हैं और में रख ' addHelperPath 'पथ जोड़ें। आप जो करना चाहते हैं उसके आधार पर आपको कम से कम अपना HTMLify फ़ंक्शन लागू करने की आवश्यकता है। उदाहरण के रूप में ज़ेंड/व्यू/हेल्प/नेविगेशन/मेनू.एफ़.पी. पर एक नज़र डालें।

class MyApp_View_Helper_MyMenu extends Zend_View_Helper_Navigation_Menu 
{ 
    public function myMenu(Zend_Navigation_Container $container = null) 
    { 
     if (null !== $container) { 
      $this->setContainer($container); 
     } 
     return $this; 
    } 

    protected function htmlify(Zend_Navigation_Page $page) 
    { 
     ... 
    } 
} 

इसके बाद, अपने phtml लिपि में:

<?php echo $this->navigation()->myMenu()->setMaxDepth(0); ?> 

या सिर्फ

<?php echo $this->navigation()->myMenu(); ?> 
अब आप में जोड़ सकते हैं सृजित HTML करने के लिए अपने स्वयं के कस्टम गुण जोड़ना चाहते हैं

अपने नेविगेशन ini या xml फ़ाइल। उदाहरण के लिए:

foreach ($iterator as $page) { 

    ... 

    $properties = new Zend_Config($page->GetCustomProperties()); 
    $myPicture = $properties->img->src; 

    ... 
} 

आशा इस मदद करता है:

<home> 
    <label>Home</label> 
    <uri>/</uri> 
    <img> 
     <src>/images/MyIcon.gif</src> 
    <img> 
</home> 

कस्टम एक्सएमएल टैग <img> नेविगेशन पेज के एक संपत्ति के रूप में जमा किया जाएगा और जैसे दिलवाया जा सकता है। पीटर

+0

आपके समाधान ने मुझे मेरे प्रश्न के साथ मदद की है। धन्यवाद! http://stackoverflow.com/questions/2364695/how-do-i-extend-the-zend-navigation-menu-view-helper – Sonny

संबंधित मुद्दे