Hiển thị danh sách các thuật ngữ phân loại được phân tách bằng dấu phẩy?


10

Drupal 7.

Trong node.tpl.php của tôi, tôi muốn in ra một danh sách các thuật ngữ phân loại (phân loại được gọi là "kênh."). Nếu tôi sử dụng:

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

Nó hoạt động, rõ ràng, nhưng điều tốt nhất tôi có thể làm để đưa chúng vào dòng là sử dụng CSS để thả chúng sang trái. Tôi muốn chúng được phân tách bằng dấu phẩy. Có ý kiến ​​gì không?

Cám ơn.

Câu trả lời:


11

Bạn có thể thử theo chủ đề lĩnh vực bằng cách sử dụng field.tpl.phphoặc theme_field().

Ví dụ (sử dụng field.tpl.php):

  1. Sao chép field.tpl.phpvào thư mục chủ đề của bạn từ "mô-đun / trường / chủ đề"
  2. Tạo một bản sao của tập tin đó và đổi tên nó thành field--field-channel.tpl.php
  3. Chỉnh sửa tập tin theo cách bạn muốn.

Như một ví dụ nhanh / bẩn để làm việc này, field--field-channel.tpl.phpcó thể trông như sau:

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

Có thể có nhiều cách để thực hiện điều này bằng cách sử dụng tệp .tpl, nhưng đây chỉ là một tùy chọn. Tôi khuyên bạn nên thêm một lớp vào DIV thay vì một kiểu và thực hiện các thay đổi trong biểu định kiểu của bạn thay vì sử dụng các kiểu nội tuyến.


Tuyệt vời, điều này làm việc hoàn hảo. Tôi không biết bạn có thể sử dụng các mẫu trên các lĩnh vực như thế. Vẫn còn nhiều điều để học với những thứ này. Cảm ơn một lần nữa.
Mike

Sử dụng các tệp tpl mạnh hơn một chút về tài nguyên và chế độ ưa thích là sử dụng đề xuất hook_field bên dưới.
shaneonabike

12

Các chữ Formatter mô-đun bây giờ đã có cho Drupal 7, và cho phép bạn thực hiện điều này không có việc làm theme tùy chọn.


Mô-đun Text Formatter có lẽ là giải pháp lý tưởng cho vấn đề này, trái ngược với câu trả lời được chọn ở trên, đòi hỏi phải lột xác xung quanh trong lớp chủ đề.
JamesWilson

7

Đây là một cách để sử dụng theme_fieldphương pháp (thêm nó vào template.phptệp của bạn ):

/**
 * 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
Siêu tuyệt vời nhờ điều này đã giúp rất nhiều thực sự! Ngoài ra phương pháp ưa thích sau đó một tập tin tpl!
shaneonabike

4

Bạn có thể làm điều này dễ dàng chỉ bằng CSS:

.field-type-taxonomy-term-Reference .field-items .field-item {
  hiển thị: khối nội tuyến;
  *Hiển thị nội dòng;
  * thu phóng: 1;
}
.field-type-taxonomy-term-Reference .field-items .field-item: after {
  Nội dung: ", ";
}
.field-type-taxonomy-term-Reference .field-items .field-item: last-child: after {
  Nội dung: "";
}

1
Cảm ơn, mặc dù tôi đã phải sử dụng Unicode thoát cho không gian, như thế này 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
Điều này đang vượt qua hệ thống chủ đề, đưa logic hiển thị được mã hóa cứng vào tệp tpl và tạo ra sự đau đầu bảo trì.
Jeremy Pháp

Có phải tốt hơn để sử dụng các mô-đun bên đang làm gần như giống nhau? Bạn có thể vui lòng cung cấp một mã thân thiện hơn với bảo trì?
Rootical V.

0

Thậm chí dễ dàng hơn cho dấu phân cách và trình bao bọc, bạn sử dụng mô đun Phân loại biểu mẫu phân loại: http://drupal.org/project/taxonomy_formatter

Thêm chi tiết từ trang dự án:

Đây là một mô-đun nhỏ được viết để cung cấp một định dạng tùy chỉnh cho các mục phân loại. Các trình định dạng mặc định cả hai đều xuất các thuật ngữ được gói trong div. Mô-đun này thêm một trình định dạng mới cho phép bạn chỉ định loại phần tử, loại trình bao bọc, các lớp cho cả hai, dấu phân cách được sử dụng và nếu chúng có liên kết đến các trang thuật ngữ hay không. Điều này cho phép tùy chọn bố trí tùy biến hơn nhiều.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.