मेनू ब्लॉक कैसे करें?


11

मैंने एक कस्टम मेनू बनाया है (इसे "mynav" कहते हैं) और अपने विषय में मैंने इसके लिए खासतौर पर एक टेम्प्लेट बनाया है block--menu--menu-mynav.tpl.phpजिसमें शामिल हैं:

<div id="mynav" class="<?php print $classes; ?>"<?php print $attributes; ?>>
  <?php print $content ?>
</div>

यह ठीक काम करता है।

हालाँकि, मैं उस आईडी को अनऑर्डर की गई सूची पर लागू करना पसंद करूँगा जो उत्पन्न और निहित है $content। मुझे लगता है कि मुझे MYTHEME_links__system_mynav_menuइस तरह एक समारोह बनाने की आवश्यकता है :

function MYTHEME_links__system_mynav_menu($variables) {
  return "TEST"; // Generate HTML here (<ul id="mynav">...)
}

लेकिन इसका कोई असर नहीं दिख रहा है।

मैं क्या गलत कर रहा हूं?



1
दूसरा प्रश्न एक विशिष्ट मेनू आईडी जोड़ने के बारे में है, जबकि यह प्रश्न अधिक सामान्य है।
kiamlaluno

स्टैकओवरफ्लो पर सटीक सवाल: stackoverflow.com/questions/11935477/…
पंजे

जवाबों:


25

अनियंत्रित सूची को थीम देने के लिए, आपको theme_menu_tree () कॉल करने की आवश्यकता है। इसे कॉल करने के लिए आप अपने टेम्पलेट को संपादित कर सकते हैं।

function THEMENAME_menu_tree__MENUNAME($variables){
  return '<ul class="your-custom-class" id="your-custom-id">' . $variables['tree'] . '</ul>';
}

फिर, यदि आप अपने लिंक को थीम बनाना चाहते हैं, तो theme_menu_link () कॉल करें।

function THEMENAME_menu_link__MENUNAME($variables) {
  $element = $variables['element'];
  $sub_menu = '';

  if ($element['#below']) {
    $sub_menu = drupal_render($element['#below']);
  }
  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

अब, ड्रुपल 7 के साथ समस्या यह है कि कस्टम मेनू के सक्रिय निशान को प्रदर्शित करने के लिए एक प्रमुख बग है।

समस्या देखें
# 520106 - डायनामिकली एक्टिव ट्रेल को सेट करने का कोई तरीका
इश्यू # 942782 - कस्टम मेन्यू कभी भी एक्टिव ट्रेल प्राप्त नहीं करता है

यदि आप कुछ सच्चे कस्टम मेनू चाहते हैं तो आप मूल रूप से भाग्य से बाहर हैं। ये मुद्दे ड्रुपल समुदाय में बहुत लंबे समय से हैं, इसलिए मुझे यकीन नहीं है कि अगर वे जल्द ही तय हो जाएंगे। मुझे नहीं पता कि क्या कुछ PHP है जो इसके साथ मदद कर सकता है। आप कार्यात्मकता को आसान बनाने में मदद करने के लिए कुछ वैकल्पिक मॉड्यूल को चालू कर सकते हैं, जैसे कि मेनू विशेषताएँ और मेनू ब्लॉक । वे दोनों ड्रुपल 7 में चरमराती मेनू प्रणाली के आसपास पहुंचने में मदद कर सकते हैं।


2

अपने विषय के टेम्पलेट के अंदर। Drpal 6 में चीजों को करने का यह तरीका था

function MYTHEME_links__system_mynav_menu($variables) {
  return "TEST"; // Generate HTML here (<ul id="mynav">...)
}

Drupal 7 में आपको कॉल करने की आवश्यकता है

  function MYTHME_menu_link(array $variables) {

  }

MYTHEME_menu_linkलगता है केवल व्यक्तिगत लिंक को संभालने के लिए। मैं नहीं पहुंच सकता ul
RoToRa

मैं इसे देख रहा हूं, मुझे नहीं पता कि क्या आप अब और कर सकते हैं। मैं Drupal 7 के साथ जानता हूं कि आपके पास लिंक पर अधिक शक्ति है, लेकिन मेनू पर कम शक्ति है।
स्ट्राइकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.