2010-02-23 12 views
15

मैंने "उप-टॉप-एनवी" नामक कस्टम मेनू बनाया है और अब मैं HTML आउटपुट को ओवरराइड करना चाहता हूं। विशेष रूप से मैं प्रत्येक आइटम को एक अद्वितीय वर्ग जोड़ना चाहता हूं।ड्रूपल ओवरराइड कस्टम मेनू टेम्पलेट

यह है कि यह कैसे एटीएम लग रहा है:

<div class="clear-block block block-menu" id="block-menu-menu-sub-top-nav"> 
    <div class="content"> 
    <ul class="menu"> 
     <li class="leaf first"><a title="Test 1" href="/test1">Test 1</a></li> 
     <li class="leaf"><a title="Test 2" href="/test2">Test 2</a></li> 
     <li class="leaf active-trail"><a class="active" title="Test 3" href="/test3">Test 3</a></li> 
     <li class="leaf last"><a title="Test 4" href="/test4">Test 4</a></li> 
    </ul> 
    </div> 
</div> 

और मैं में इसे बदलने के लिए करना चाहते हैं:

<div class="clear-block block block-menu" id="block-menu-menu-sub-top-nav"> 
    <div class="content"> 
    <ul class="menu"> 
     <li class="leaf test1 first"><a title="Test 1" href="/test1">Test 1</a></li> 
     <li class="leaf test2"><a title="Test 2" href="/test2">Test 2</a></li> 
     <li class="leaf test3 active-trail"><a class="active" title="Test 3" href="/test3">Test 3</a></li> 
     <li class="leaf test4 last"><a title="Test 4" href="/test4">Test 4</a></li> 
    </ul> 
    </div> 
</div> 

यह मैं अधिक स्टाइल शक्ति देना होगा। कोई विचार यह कैसे काम करता है?

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

उत्तर

12

मैं अब काम मिल गया के लिए काफी जो चाहें करें करने के लिए अपने विषय के template.php में theme_menu_item फ़ंक्शन का उपयोग कर सकते हैं। कोड का यह टुकड़ा किसी और की भी मदद कर सकता है! यह yourtheme/template.php

function phptemplate_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) { 

    $class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf')); 

    if (!empty($extra_class)) 
    $class .= ' '. $extra_class; 

    if ($in_active_trail) 
    $class .= ' active-trail'; 

    $class .= ' ' . preg_replace('/[^a-zA-Z0-9]/', '', strtolower(strip_tags($link))); 

    return '<li class="'. $class .'">'. $link . $menu ."</li>\n"; 
} 
1

आप वर्गों को जोड़ने सहित उन मेनू आइटम,, पहचान पत्र, आदि

+0

ठीक है लेकिन यह कस्टम मेनू के लिए कैसे काम करता है? क्या आप मुझे एक उदाहरण दे सकते हैं? – n00b

18

ड्रुपल 7 के बजाय theme_menu_link का उपयोग करता theme_menu_item

<?php 
function theme_menu_link(array $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"; 
} 
?> 
+0

"theme_menu_link के बजाय थीम_मेनू_लिंक"? यहाँ क्या बात है? – demonkoryu

+0

बिल्कुल। "theme_menu_item के बजाय थीम_मेनू_लिंक"। –

3

के एपीआई के माध्यम से देखने के बाद में चला जाता है मैं अंत में एक ही कक्षा के साथ रूट मेनू टैग करने के लिए एक आसान समाधान पाया (यह गतिशील रूप से अनुकूल बनाए रखने के दौरान, केवल शीर्ष स्तर के मेनू को विशिष्ट रूप से शैली के लिए उपयोगी है)। बस mlid के बजाय plid का उपयोग करें। मैंने देखा कि चढ़ाई हमेशा शीर्ष स्तर के मेनू के लिए 0 है।

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

    $element['#attributes']['class'][] = 'menu-' . $element['#original_link']['plid']; 

    if ($element['#below']) { 
    $sub_menu = drupal_render($element['#below']); 
    } 

    $output = l($element['#title'], $element['#href'], $element['#localized_options']); 
     $count = 1; 
    return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n"; 
} 
संबंधित मुद्दे