Menampilkan daftar istilah taksonomi yang dipisahkan koma?


10

Drupal 7.

Di node.tpl.php saya, saya ingin mencetak daftar istilah taksonomi (taksonomi disebut "saluran."). Jika saya menggunakan:

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

Ini bekerja, tentu saja, tetapi yang terbaik yang bisa saya lakukan untuk mendapatkan mereka sebaris adalah menggunakan CSS untuk melayang mereka pergi. Saya ingin mereka dipisahkan oleh koma. Ada ide?

Terima kasih.

Jawaban:


11

Anda dapat mencoba memberi tema pada bidang menggunakan field.tpl.phpatau theme_field().

Sebagai contoh (menggunakan field.tpl.php):

  1. Salin field.tpl.phpke direktori tema Anda dari "modules / field / theme"
  2. Buat salinan dari file itu dan ganti namanya field--field-channel.tpl.php
  3. Edit file sesuka Anda.

Sebagai contoh cepat / kotor agar ini berfungsi, field--field-channel.tpl.phpbisa terlihat seperti:

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

Mungkin ada beberapa cara untuk mencapai ini menggunakan file .tpl, tetapi ini hanya satu opsi. Saya sarankan menambahkan kelas ke DIV daripada gaya dan membuat perubahan dalam stylesheet Anda daripada menggunakan gaya inline.


Luar biasa, ini bekerja dengan sempurna. Saya tidak tahu Anda bisa menggunakan templat di bidang seperti itu. Masih harus banyak belajar dengan hal ini. Terima kasih lagi.
Mike

Menggunakan file tpl adalah sumber daya yang sedikit lebih intensif dan mode yang disukai adalah menggunakan saran hook_field di bawah ini.
shaneonabike

11

The Text Formatter modul sekarang tersedia untuk Drupal 7, dan memungkinkan Anda melakukan hal ini tanpa kerja tema kustom.


Modul Text Formatter mungkin merupakan solusi ideal untuk ini sekarang, sebagai lawan dari jawaban yang dipilih di atas yang mengharuskan mucking di lapisan tema.
JamesWilson

7

Inilah salah satu cara untuk menggunakan theme_fieldpendekatan (tambahkan ke template.phpfile Anda ):

/**
 * 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
Super hebat terima kasih ini banyak membantu sebenarnya! Juga metode yang disukai kemudian file tpl!
shaneonabike

4

Anda dapat melakukannya dengan mudah hanya di CSS:

.field-type-taxonomy-term-reference .field-items .field-item {
  display: inline-block;
  * display: inline;
  * zoom: 1;
}
.field-type-taxonomy-term-reference .field-items .field-item: after {
  kandungan: ", ";
}
.field-type-taxonomy-term-reference .field-items .field-item: last-child: after {
  kandungan: "";
}

1
Terima kasih, walaupun saya harus menggunakan Unicode yang diloloskan untuk ruang, seperti ini 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
Ini mengesampingkan sistem tema, menempatkan logika tampilan kode keras ke file tpl dan membuat sakit kepala pemeliharaan.
Jeremy French

Apakah lebih baik menggunakan modul samping yang melakukan hampir sama? Bisakah Anda memberikan kode yang lebih ramah pemeliharaan?
Rootical V.

0

Untuk pembatas dan pembungkus yang lebih mudah, Anda menggunakan modul Formatonomonomis Taksonomi: http://drupal.org/project/taxonomy_formatter

Lebih detail dari halaman proyek:

Ini adalah modul kecil yang ditulis untuk menyediakan formatter khusus untuk item taksonomi. Format default keduanya menghasilkan istilah yang dibungkus dengan div. Modul ini menambahkan formatter baru yang memungkinkan Anda menentukan jenis elemen, tipe pembungkus, kelas untuk keduanya, pemisah yang digunakan, dan apakah mereka terhubung ke halaman istilah atau tidak. Ini memberikan opsi tata letak yang jauh lebih dapat disesuaikan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.