显示以逗号分隔的分类术语列表?


10

Drupal 7。

在我的node.tpl.php中,我想打印出一个分类术语列表(该分类称为“通道”。)。如果我使用:

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

显然,它可以工作,但是要使它们内联,我能做的最好的就是使用CSS使它们浮动。我希望它们之间用逗号分隔。有任何想法吗?

谢谢。

Answers:


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文件会占用更多资源,首选模式是使用下面的hook_field建议。
shaneonabike 2014年

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 2014年

4

您可以在CSS中轻松完成此操作:

.field-type-taxonomy-term-reference .field-items .field-item {
  显示:inline-block;
  *显示:内联;
  *缩放:1;
}
.field-type-taxonomy-term-reference .field-items .field-item:after {
  内容:“,”;
}
.field-type-taxonomy-term-reference .field-items .field-item:last-child:after {
  内容:“”;
}

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

对于定界符和包装器来说,甚至更容易,您可以使用Taxonomy Formatter模块:http : //drupal.org/project/taxonomy_formatter

来自项目页面的更多详细信息:

这是编写的一个小模块,用于为分类项目提供自定义格式程序。默认格式化程序都输出用div包装的术语。该模块添加了一个新的格式化程序,该格式化程序允许您指定元素类型,包装器类型,两者的类,使用的分隔符以及它们是否链接到术语页面。这提供了更多可定制的布局选项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.