Drupal 6 - 专门在函数之间传递变量 - 将菜单名称传递给phptemplate_menu_item

时间:2011-12-02 13:13:52

标签: drupal-6 drupal-theming

我对Drupal 6很陌生并且正在使用它。我的主题需要主菜单为我合理涉及的样式输出相当广泛的html / css。为了做到这一点,我拼凑了这个代码'function phptemplate_menu_item'(见下),它位于我的template.php中,并根据菜单项是否有子项生成不同的html,并使用链接的内容生成一个css类

我的问题是这段代码也适用于我的其他菜单。我想让menu_item生成不同的html,具体取决于它是否在主菜单中。我原以为最简单的方法是使用函数phptemplate_menu_item中的if语句,例如:

function phptemplate_menu_item (...){
  if ($menu_name == 'primary-links')
  {DO ABC}
  else
  {DO XYZ}
}

但是我相信我需要知道如何将菜单名称传递给phptemplate_menu_item函数。任何有关这方面的帮助都会非常感激,因为我一直在试图解决这个问题一直困扰着我。

谢谢!

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

$class = ($menu ? 'no_wrap' : ($has_children ? 'collapsed' : 'li_wrap'));
if (!empty($extra_class)) {
  $class .= ' '. $extra_class;
}
if ($in_active_trail) {
  $class .= ' active-trail';
}
if (!empty($link)) {
/* The following section gives the list items unique classes based on their link text - note how spaces and sepcial chars are removed */
// remove all HTML tags and make everything lowercase
$css_id = strtolower(strip_tags($link));
// remove colons and anything past colons
if (strpos($css_id, ':')) $css_id = substr ($css_id, 0, strpos($css_id, ':'));
// Preserve alphanumerics, everything else goes away
$pattern = '/[^a-z]+/ ';
$css_id = preg_replace($pattern, '', $css_id);
$class .= ' '. $css_id;
}
// the following code returns the menu item formatted in a different fashion depending on the class of the item. The first one is for items with a class of none - ie the space li at end of menu
if (strstr($class, 'none')) {
      return '<li class="'. $class . ' main"></span></span></li>';
}
if (strstr($class, 'li_wrap')) {
      return '<li class="'. $class .' main"><span class="wrapped">'. $link . $menu ."<span class='indicator'></span></li>\n";
}
if (strstr($class, 'no_wrap')) {
      return '<li class="'. $class . ' main">'. $link ."<span class='indicator'></span><span class='menu_box'><span class='menu_box_inner'>". $menu ."</span></span></li>\n";
}

}

1 个答案:

答案 0 :(得分:0)

我认为解决方案发现here这是最好的,所以我不会因此而受到赞扬。您应该从theme_menu_item开始定义自定义函数theme_primary_links,而不是覆盖theme_links。您可以选择您认为最适合自定义主题的名称(但请确保它尚未使用)

底线:有时定义自定义主题比覆盖默认主题更容易。这样您就可以根据需要严格应用自定义主题(例如,仅应用于主菜单链接)。如果您希望更改是全局的(例如应用于所有菜单链接),最好使用覆盖。