0

对于每个节点预览,我希望在顶部有代表可用翻译的小标志图标。我看过语言切换器代码,但它一直输出所有语言。这很烦人,因为人们会单击他们的语言,然后发现该页面无论如何都只有英文版(我有一个网站,其中包含许多不同语言的文章)。我已经看到这样做了。我对 Drupal 编程比较陌生。谁能给我指点?

谢谢!

4

1 回答 1

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 > Caching 中清除 Drupal 缓存(即使缓存被禁用!)才能让它工作。

完毕!

...要在完整节点的顶部添加语言链接,我还必须在 node.tpl.php 的不同位置添加另一个“print $translationlinks”,因为 h3 标题仅用于节点预览。然后,为了删除完整节点底部的冗余语言链接,我尝试了您在 template.php 中看到的注释掉的未设置行 - 我发现即使另一个网站推荐了它,它也没有效果。所以我最终做的是为此使用 CSS,将以下内容添加到我的模板的 CSS 文件中:

.node-links .translation-link {
  display: none;
}

我希望我的经验能帮助其他有同样问题的人。

于 2012-05-12T18:29:02.583 回答