无法覆盖融合子主题中的theme_links()

时间:2011-03-01 02:07:09

标签: drupal drupal-6 drupal-themes

我在Fusion下设置了一个子主题,并在我的子主题中创建了一个template.php文件。我添加了以下主题覆盖,它完美无缺。

function ThemeName_menu_local_tasks() {
    $output = '';
  if ($primary = menu_primary_local_tasks()) {
    $output .= "<div class=\"tabs primary\">\n";
    $output .= "<ul class=\"tabs primary\">\n" . $primary . "</ul>\n";
    $output .= "</div>\n";
  }
  if ($secondary = menu_secondary_local_tasks()) {
    $output .= "<div class=\"tabs secondary\">\n";
    $output .= "<ul class=\"tabs secondary\">\n" . $secondary . "</ul>\n";
    $output .= "</div>\n";    
  }
  return $output;
}

function ThemeName_filter_tips_more_info () {
    return '';
}

function ThemeName_filter_tips() {
    return '';
}

但是,当我尝试覆盖theme_links时,它根本不起作用。

function ThemeName_links($links, $attributes = array('class' => 'links')) {
  global $language;
  $output = '';

  if (count($links) > 0) {
    $output = '<div class = "abc"><ul' . drupal_attributes($attributes) . '>';

    $num_links = count($links);
    $i = 1;

    foreach ($links as $key => $link) {
      $class = $key;

      // Add first, last and active classes to the list of links to help out themers.
      if ($i == 1) {
        $class .= ' first';
      }
      if ($i == $num_links) {
        $class .= ' last';
      }
      if (isset($link['href']) && ($link['href'] == $_GET['q'] || ($link['href'] == '<front>' && drupal_is_front_page()))
           && (empty($link['language']) || $link['language']->language == $language->language)) {
        $class .= ' active';
      }
      $output .= '<li' . drupal_attributes(array('class' => $class)) . '>';

      if (isset($link['href'])) {
        // Pass in $link as $options, they share the same keys.
        $output .= l($link['title'], $link['href'], $link);
      }
      else if (!empty($link['title'])) {
        // Some links are actually not links, but we wrap these in <span> for adding title and class attributes
        if (empty($link['html'])) {
          $link['title'] = check_plain($link['title']);
        }
        $span_attributes = '';
        if (isset($link['attributes'])) {
          $span_attributes = drupal_attributes($link['attributes']);
        }
        $output .= '<span' . $span_attributes . '>' . $link['title'] . '</span>';
      }

      $i++;
      $output .= "</li>\n";
    }

    $output .= '</ul></div>';
  }

  return $output;
}

顺便说一句,我在上面的ThemeName_links()中添加了以下内容以进行测试。

<div class = "abc"> and </div>

我还使用Devel清除了Flush所有缓存。

1 个答案:

答案 0 :(得分:0)

你所做的一切都是正确的(我指的是你做主题覆盖的方式),而Fusion主题系统也运作良好。首先,当我尝试使用Fusion主题时,我会遇到与您相同的问题。但在我浏览Fusion系统后,看看Fusion如何显示链接(包括主链接,辅助链接),我发现在他们调用的 fusion / fusion_core / page.tpl.php 文件中此功能主题('grid_block',$ primary_links_tree,'primary-menu')以显示主要链接。这是Fusion编写的功能主题。所以你需要做的很简单,你可以调用Drupal的默认主题链接功能:主题('links',$ primary_links)并从那里覆盖你的ThemName_links()。

我现在要做的另一件事是覆盖grid_block函数。如果我发现一些有趣的东西,我会稍后发布。