对于每个节点预览,我希望在顶部有代表可用翻译的小标志图标。我看过语言切换器代码,但它一直输出所有语言。这很烦人,因为人们会单击他们的语言,然后发现该页面无论如何都只有英文版(我有一个网站,其中包含许多不同语言的文章)。我已经看到这样做了。我对 Drupal 编程比较陌生。谁能给我指点?
谢谢!
对于每个节点预览,我希望在顶部有代表可用翻译的小标志图标。我看过语言切换器代码,但它一直输出所有语言。这很烦人,因为人们会单击他们的语言,然后发现该页面无论如何都只有英文版(我有一个网站,其中包含许多不同语言的文章)。我已经看到这样做了。我对 Drupal 编程比较陌生。谁能给我指点?
谢谢!
我自己想出来的,并在这里注意到它,因为我知道我不是唯一一个遇到这个问题的人。
我正在处理的模板称为 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 > Caching 中清除 Drupal 缓存(即使缓存被禁用!)才能让它工作。
完毕!
...要在完整节点的顶部添加语言链接,我还必须在 node.tpl.php 的不同位置添加另一个“print $translationlinks”,因为 h3 标题仅用于节点预览。然后,为了删除完整节点底部的冗余语言链接,我尝试了您在 template.php 中看到的注释掉的未设置行 - 我发现即使另一个网站推荐了它,它也没有效果。所以我最终做的是为此使用 CSS,将以下内容添加到我的模板的 CSS 文件中:
.node-links .translation-link {
display: none;
}
我希望我的经验能帮助其他有同样问题的人。