Как я могу создать список, разделенный запятыми, для нескольких ссылок на узлы в Drupal 6?

У меня есть Author content_type, который я переключаю на имя пользователя в статьях. Проблема в том, что у истории может быть несколько авторов, и следующий код в template.php сгенерирует только первого автора. Как я могу заставить это выводиться для чтения как «Джон Смит, Джейн Доу и Мэри Поппинс | 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]),
  ));
}

Пожалуйста, имейте в виду, что я также хочу использовать это для представлений, чтобы ссылка на узел также выводилась правильно.

Спасибо, Стив


person Steve Perks    schedule 16.02.2010    source источник
comment
Уточняющий вопрос: field_author — это поле ссылки на узел CCK, ограниченное вашим пользовательским типом контента «Автор» и допускающее несколько значений — это правильно?   -  person Henrik Opel    schedule 20.02.2010
comment
это правильно - и field_author, и field_publish_date являются пользовательскими типами контента   -  person Steve Perks    schedule 23.02.2010


Ответы (2)


Предполагая, что приведенный вами пример работает для вывода первого автора, наиболее прямым решением для получения всех авторов в списке с запятыми будет следующее:

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

Тогда вы бы вывели $author_list вместо $node->field_author[0][view]

Более «друпаловский» способ сделать это — скопировать modules/cck/theme/content-field.tpl.php в каталог вашей темы, а затем создать его копию с именем content-field-field_author.tpl.php. также. Затем вы можете внести изменения в новый файл, которые заменят то, как значения отображаются конкретно для поля «автор». Затем вы можете вывести тематическое значение field_author где угодно в пользовательском файле node-[node_type].tpl.php. (Вам может потребоваться очистить кэшированные данные с помощью кнопки Администрирование > Конфигурация сайта > Производительность, чтобы пользовательские шаблоны загружались в первый раз.)

Если для вашего представления «Стиль строки» установлено значение «Узел», то оно также будет использовать шаблоны узла и поля. Если у вас установлено значение «Поля», вам нужно отдельно настроить тему поля в представлении. См. «Тема: информация» вашего представления для шаблонов представлений, которые вы можете переопределить в своей теме.

Изменить:
Пропущен тот факт, что вам нужен список на естественном языке. Это займет немного больше времени, но вот функция 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);

person ashtonium    schedule 22.02.2010
comment
Спасибо, ashtonium. Как мне получить Джона, Джейн и Мэри или Джона и Мэри и т. д.? - person Steve Perks; 23.02.2010
comment
Я упустил тот факт, что вам нужен список естественного языка, я добавил в свой ответ, чтобы включить это. Это полностью отвечает на ваш вопрос? - person ashtonium; 23.02.2010
comment
Большое спасибо ashtonium. У меня было другое решение после того, как я попробовал его сам, но это немного более элегантно. - person Steve Perks; 23.02.2010

Как насчет использования плагина Author Taxonomy?

Таксономия авторов позволяет вам назначить одного или нескольких авторов узлу, используя термины из таксономии имен авторов. Этот модуль также обеспечивает полностью тематическую замену вашей подписи (текст «отправлено именем пользователя в дату»).

Отображает имена авторов в сериализованном виде: «Джейн и Джек» или «Джейн, Джек и Джо».

Если вы нужен другой подход.

person GmonC    schedule 22.02.2010
comment
Я посмотрел на это, но проблема в том, что все импорты данных, структура представления и т. Д. Уже произошли, и у меня нет роскошного банкомата. - person Steve Perks; 23.02.2010
comment
Извини за это. Я думаю, что ответ @ashtonium лучше подходит для вашей проблемы ... Удачи! - person GmonC; 23.02.2010