0

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

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

我在我的主题中创建了一个名为$themenamepreprocess_nodetemplate.php 的函数,内容如下:

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在函数的末尾打印时,链接数组正是我想要的;但是在呈现页面时,会显示旧的默认链接。

为什么?如何使用主题功能仅针对某些内容类型且仅在节点列表页面中为节点链接设置主题?

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

4

1 回答 1

1

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

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

现在,您可能正在查看错误的主题挂钩。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']);
    }
}
于 2010-09-02T16:04:00.327 回答