我最近对产品类别菜单做了类似的操作。这仅适用于1级深度,但可以轻松修改以显示更多级别。
/**
* Implements theme_menu_link().
*/
function THEME_menu_link__main_menu($variables) {
$sub_menu = '';
$element = $variables['element'];
$menu_string = $element['#title'];
if (module_load_include('inc','pathauto','pathauto') !== FALSE) {
$menu_string = pathauto_cleanstring($menu_string);
}
if ($menu_string == 'categories') {
$sub_menu = get_categories_menu();
}
if ($sub_menu) {
$element['#attributes']['class'][] = 'haschildren';
}
$output = l($element['#title'], $element['#href'], $element['#localized_options']);
return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}
function get_categories_menu() {
$current_category = arg(2); // Get current category from path
$volcab = taxonomy_vocabulary_machine_name_load('product-categories');
$tree = taxonomy_get_tree($volcab->vid,0,1);
$output = '<ul class="menu product-category">';
foreach ($tree as $term) {
$safe_term = pathauto_cleanstring($term->name);
$class = ($current_category==$safe_term) ? ' class="active"' : '';
$output .= '<li><a' . $class . ' href="/drupal//path/to/' . $safe_term . '">' . $term->name . '</a></li>';
}
$output .= '</ul>';
return $output;
}
最好将get_category_menu函数作为一个块使用,但为了方便起见,这里在template.php中显示为另一个函数。
希望它能帮助或至少迈向解决方案。
保罗