2010-09-02 103 views
0

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

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

我创建了一个在我的主题命名为$themenamepreprocess_node到的template.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时,链接数组完全是我想要的;但是当页面呈现时,会显示旧的默认链接。

为什么? 我如何主题节点链接只是为了一些内容类型,并且只在节点列表页面中使用主题功能?

P.S:我清除缓存和主题注册表每次尝试之前;)

回答

1

第一:你应该测试在$挂钩,否则这种处理功能将在每一个地方被调用。即使您在大型服务器上运行小型站点,它也会使您的站点停止运行。

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

现在,您可能正在查看错误的主题钩子。 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']); 
    } 
} 
+0

感谢您的建议,他们真的很感激,即时通讯新的drupal ..但你写了错误的例子吗?我看到你的例子使用theme_preprocess_node而不是theme_link,你指出 – Strae 2010-09-02 17:35:11

+0

对不起。的确,我写错了这个功能。编辑它。 – berkes 2010-09-03 07:39:43

+0

mmh ...在api.drupal.org没有'theme_preprocess_links',也没有任何'* _preprocess_links' ...你的意思是'hook_link_alter'? – Strae 2010-09-03 19:37:48