0

I have an Author content_type that I'm switching out for username in articles. The problem is that a story can have multiple authors, and the following code in template.php will only generate the first author. How can I get this to output to be readable as "By John Smith, Jane Doe and Mary Poppins | Feb 19, 2010"?

function mytheme_date($node) {
  return t('By !username | !datetime',
  array(
    '!username' => t($node->field_author[0][view]),
    '!datetime' => t($node->field_publish_date[0][view]),
  ));
}

Please bear in mind that I'm also wanting to use this for views too, so that a node reference will output correctly there too.

Thanks, Steve

4

2 回答 2

3

假设您给出的示例可以输出第一作者,那么将所有作者放在逗号分隔列表中的最直接解决方案如下:

foreach($node->field_author as $author) {
  $authors[] = $author[view];
}
$author_list = implode(', ', $authors);

然后你会输出$author_list代替$node->field_author[0][view]

一种更“Drupal”的方法是将 modules/cck/theme/content-field.tpl.php 复制到您的主题目录,然后将它的副本命名为content-field-field_author.tpl.php。然后,您可以对新文件进行更改,这将覆盖专门为“作者”字段显示值的方式。然后,您可以在自定义 node-[node_type].tpl.php 文件中的任意位置输出主题 field_author 值。(您可能需要通过“管理”>“站点配置”>“性能”上的按钮清除缓存数据,以便首次加载自定义模板。)

如果您的视图的“行样式”设置为“节点”,那么它也将使用节点和字段模板。如果您将其设置为“字段”,那么您需要单独为视图中的字段设置主题。请参阅您的视图的“主题:信息”以获取您可以在主题中覆盖的视图模板。

编辑:
错过了您想要自然语言列表的事实。这需要更多时间,但这里有一个 Drupalized 函数可以做到这一点:

function implode_language($array = array()) {
  $language_string = '';
  if (count($array)) {
    // get the last element    
    $last = array_pop($array);
    // create a natural language list of elements if there are more than one
    if (count($array)) {
      $language_string = implode(', ', $array) .' '. t('and') .' '. $last;
    }
    else {
      $language_string = $last;
    }
  }
  return $language_string;
}

然后,当然,使用以下代码代替我上面的第一个代码块的最后一行:
$author_list = implode_language($authors);

于 2010-02-22T16:02:44.913 回答
0

使用Author Taxonomy插件怎么样?

作者分类允许您使用作者姓名分类中的术语将一个或多个作者分配给节点。该模块还为您的署名提供了一个完全主题化的替代品(“由用户名在日期提交”文本)。

以序列化方式显示作者姓名:“简和杰克”或“简、杰克和乔”。

如果您需要不同的方法,请查看多作者教程。

于 2010-02-22T04:49:55.047 回答