对于每个节点预览,我希望顶部有一些小的标志图标代表可用的翻译。我见过语言切换器代码,但它一直输出所有语言。这很烦人,因为人们会点击他们的语言,然后发现页面只有英文版本(我有一个网站上有很多种语言的文章)。我已经看到了这一点。我对Drupal编程比较陌生。谁能给我一个指针?
谢谢!
答案 0 :(得分:0)
我自己想出来,并在这里注意到它因为我知道我不是唯一有这个问题的人。
我正在处理的模板叫做scaccarium,所以我去了 /themes/scaccarium/template.php 并添加了以下功能:
function scaccarium_preprocess_node(&$vars) {
$node = $vars['node'];
$translationlinks = array();
// Move translation links into separate variable
foreach ($node->links as $key => $value) {
if ($value['attributes']['class'] == 'translation-link') {
$translationlinks[$key] = $value;
// unset($vars['node']->links[$key]);
}
}
$vars['translationlinks'] = theme('links', $translationlinks, array('class' => 'links translationlinks inline'));
}
如果您的模板被调用了其他内容,您显然应该转到另一个文件夹并更改函数名称的第一个单词。如果您的主题带有现有的_preprocess_node函数,请仔细修改它。
然后,我去了模板的 node.tpl.php 并添加了
<?php if ($translationlinks) {
print $translationlinks;
} ?>
标题旁边的。
然后我必须在Performance&gt;中清除Drupal缓存(即使缓存已被禁用!)缓存以使其生效。
完成!
... 要在完整节点的顶部添加语言链接,我还必须在node.tpl.php的不同位置添加另一个“print $ translationlinks”,因为h3标题仅用于节点预览。然后,为了删除完整节点底部的冗余语言链接,我尝试了你在template.php中注释掉的未设置行 - 我发现即使其他网站推荐它也没有效果。所以我最终做的就是使用CSS,将以下内容添加到模板的CSS文件中:
.node-links .translation-link {
display: none;
}
我希望我的经验可以帮助其他人解决同样的问题。