2011-03-01 65 views
0

我在Fusion下创建了一个子主题,并在我的子主题中创建了一个template.php文件。我添加了以下主题覆盖,并且完美地工作。无法覆盖融合子主题中的theme_links()

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刷新所有缓存。

回答

0

你所做的一切都是正确的(我指的是你做主题覆盖的方式)和融合主题系统也很好。起初,当我尝试使用Fusion主题时,我面临与您同样的问题。但在我浏览Fusion系统后,看到Fusion如何显示链接(包括主链接,次链接),我发现在fusion/fusion_core/page.tpl.php文件中他们称这个功能为主题( 'grid_block',$ primary_links_tree,'主菜单')显示主链接。这是Fusion编写的功能主题。所以你需要做的很简单,你可以调用Drupal的默认主题链接功能:主题('links',$ primary_links)并覆盖你的ThemName_links()。

我现在想做的另一件事是覆盖grid_block函数。如果我发现一些有趣的事情,我会晚一些发布。