Drupal 6中的主题节点链接

时间:2010-09-02 14:06:35

标签: php drupal drupal-6 themes drupal-theming

默认情况下,博客页面中的节点链接包含blog_usernames_blog(管理员博客),comment_add(添加新评论)和node_read_more(了解详情)。

我需要摆脱前两个,并更改node_read_more中的文本。

我在主题中的template.php中创建了一个名为$themenamepreprocess_node的函数,其中包含以下内容:

function mytheme_preprocess_node(&$vars, $hook){
    $node = $vars['node'];
    //blog node, not in full node page
    if($vars['node']->type == 'blog' AND !$vars['page']){
        $vars['node']->links['node_read_more']['title'] = t('My custom read more here');
        unset($vars['node']->links['blog_usernames_blog']);
        unset($vars['node']->links['comment_add']);
    }
    //debug:
    echo "<!-- DEBUG\n";
    print_r($vars['node']->links);
    echo "\n-->";
}

但它不起作用;当我在函数的末尾打印$vars['node']->links时,链接数组就像我想要的那样;但是在呈现页面时,会显示旧的默认链接。

为什么呢? 我如何主题节点链接仅针对某些内容类型,并且仅在节点列表页面中使用主题函数?

p.s:我在每次尝试之前都清除了缓存和主题注册表;)

1 个答案:

答案 0 :(得分:1)

首先:您应该在$ hook上进行测试,否则将在每个地方调用此预处理函数。即使您在大型服务器上运行小型站点,它也会将您的站点关闭。

第二:如果print_r打印正确的链接,那么肯定代码/是/ ran,无需担心主题注册表。

现在,您可能正在查看错误的主题钩子。 theme_links就是你想要的。 http://api.drupal.org/api/function/theme_links/5

function mytheme_preprocess_links(&$vars, $hook){
    if ($hook == 'links') {
      var_dump($vars);
      unset($vars['links']['blog_usernames_blog']);
    }
}