默认情况下,博客页面中的节点链接包含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:我在每次尝试之前都清除了缓存和主题注册表;)
答案 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']);
}
}