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

问题描述 投票:0回答:1

我对 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";
}

}

php drupal-6 drupal-theming
1个回答
0
投票

嗯,我认为在here找到的解决方案是最好的,所以我不会因此而获得荣誉。您应该从

theme_menu_item
开始定义自定义函数
theme_primary_links
,而不是覆盖
theme_links
。您可以选择您认为最适合自定义主题的任何名称(但确保它尚未使用)。

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

© www.soinside.com 2019 - 2024. All rights reserved.