Відобразити розділений комою список термінів таксономії?


10

Drupal 7.

У своєму node.tpl.php я хочу роздрукувати список термінів таксономії (таксономія називається "канали"). Якщо я використовую:

<?php print render($content['field_channel']); ?>

Це, очевидно, працює, але найкраще, що я можу зробити, щоб зробити їх вбудованими - це використовувати CSS для пропускання їх ліворуч. Я хотів би, щоб вони були розділені комами. Будь-які ідеї?

Дякую.

Відповіді:


11

Ви можете спробувати тематизувати поле за допомогою field.tpl.phpабо theme_field().

Як приклад (використовуючи field.tpl.php):

  1. Скопіюйте field.tpl.phpу свій тематичний каталог із "модулів / поля / теми"
  2. Зробіть копію цього файлу та перейменуйте його на field--field-channel.tpl.php
  3. Відредагуйте файл, як вам подобається.

Як швидкий / брудний приклад для цього field--field-channel.tpl.phpможе виглядати:

<div class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
  <?php if (!$label_hidden) : ?>
    <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>:&nbsp;</div>
  <?php endif; ?>
  <div class="field-items"<?php print $content_attributes; ?>>
    <?php foreach ($items as $delta => $item) : ?>
      <div style="display:inline;" class="field-item <?php print $delta % 2 ? 'odd' : 'even'; ?>"<?php print $item_attributes[$delta]; ?>>
        <?php 
          print render($item);
          // Add comma if not last item
          if ($delta < (count($items) - 1)) {
            print ','; 
          }
        ?>
      </div>
    <?php endforeach; ?>
  </div>
</div>

Можливо, існує кілька способів досягти цього за допомогою файлу .tpl, але це лише один варіант. Я рекомендую додати клас до DIV замість стилю та внести зміни у свій таблицю стилів, а не використовувати вбудовані стилі.


Дивовижно, це спрацювало чудово. Я не знав, що ти можеш використовувати шаблони на таких полях. Ще є чому навчитися з цим матеріалом. Знову дякую.
Майк

Використання tpl-файлів дещо інтенсивніше, і кращим режимом є використання наведеної нижче пропозиції гака.
shaneonabike

11

Модуль текстового форматування тепер доступний для Drupal 7, і дозволяє це робити без роботи з власною темою.


Модуль текстового форматування - це, мабуть, ідеальне рішення для цього зараз, на відміну від обраної відповіді вище, яка вимагає перегляду в шарі теми.
JamesWilson

7

Ось один із способів використовувати theme_fieldпідхід (додати його у свій template.phpфайл):

/**
 * Implements theme_field()
 *
 * Make field items a comma separated unordered list
 */
function THEMENAME_field__NAME_OF_FIELD__NAME_OF_CONTENT_TYPE($variables) {
  $output = '';

  // Render the label, if it's not hidden.
  if (!$variables['label_hidden']) {
    $output .= '<div class="field-label"' . $variables['title_attributes'] . '>' . $variables['label'] . ':&nbsp;</div>';
  }

  // Render the items as a comma separated inline list
  $output .= '<ul class="field-items"' . $variables['content_attributes'] . '>';
  for ($i=0; $i < count($variables['items']); $i++) {
    $output .= '<li>'. drupal_render($variables['items'][$i]);
    $output .= ($i == count($variables['items'])-1) ? '</li>' : ', </li>';
  }
  $output .= '</ul>';

  return $output;
}

1
Супер велике спасибі це дуже допомогло насправді! Також кращий метод, а потім tpl-файл!
shaneonabike

4

Це можна легко зробити просто в CSS:

.field-type-taxonomy-term-reference .field-items .field-item {
  дисплей: вбудований блок;
  * дисплей: вбудований;
  * зум: 1;
}
.field-type-таксономія-термін-посилання .field-items .field-item: після {
  зміст: ",";
}
.field-type-taxonomy-term-reference .field-items .field-item: last-child: після {
  зміст: "";
}

1
Дякую, хоча мені довелося використовувати пробіг Unicode для простору, як-от так content: ", \00a0": stackoverflow.com/a/5467676/724176
Hugo


0
<?php
if ($node->taxonomy) {
    foreach($node->taxonomy as $term) {
        if ($term->vid == 3) { // the id of the vocabulary
            $my_terms[] = l(
                t($term->name),
                'taxonomy/term/' . $term->tid
            );
        }
    }
}

if ($my_terms) { ?>
    <div class="clear-block">
        <div class="terms">
            <?php print implode(", ", $my_terms); ?>
        </div>
    </div>
<?php } ?>

3
Це набігання теми теми, введення жорстко закодованої логіки відображення у файл tpl та створення головного болю в обслуговуванні.
Джеремі Френч

Чи краще використовувати бічні модулі, які роблять майже те саме? Не могли б ви надати більш зручний для обслуговування код?
Rootical V.

0

Ще простіше для роздільника та обгортки, ви використовуєте модуль форматформа таксономії: http://drupal.org/project/taxonomy_formatter

Детальніше на сторінці проекту:

Це невеликий модуль, написаний для надання користувальницького форматера для елементів таксономії. Обидва форматтери за замовчуванням виводять умови, загорнуті в діви. Цей модуль додає новий форматер, який дозволяє вказати тип елемента, тип обгортки, класи для обох, використовуваний роздільник і якщо вони посилаються на сторінки термінів чи ні. Це дає набагато більше налаштованих варіантів компонування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.