Batasi Teaser untuk hanya menampilkan nilai pertama dari suatu Bidang

14

Saya memiliki Tipe Konten dengan Bidang Gambar. Bidang ini biasanya diisi dengan nilai 0 hingga 4. Secara default penggoda untuk Jenis Konten ini menampilkan semua 0 hingga 4 gambar. Bagaimana saya bisa menyesuaikan Teaser untuk hanya menampilkan gambar pertama?

Greg
sumber

Jawaban:

12

Buat modul khusus, ganti MODULENAMEdengan nama modul dan field_imagedengan nama bidang Anda:

/**
 * Implements hook_entity_view().
 */
function MODULENAME_entity_view($entity, $type, $view_mode, $langcode) {
  if ($view_mode == 'teaser') {
    $entity->content['field_image']['#items'] = array_slice($entity->content['field_image']['#items'], 0, 1);
  }
}

Lihat dokumentasi hook_entity_view () untuk detail lebih lanjut.

tim.plunkett
sumber
Ini terlihat menjanjikan, saya akan mencobanya. Mungkin perlu beberapa hari sebelum saya bisa menerapkannya dan melaporkan kembali. Saya relatif baru dalam menulis modul, jadi saya punya beberapa pertanyaan: (1) apakah kode sampel Anda berfungsi (tidak crash) ketika ada nilai nol di lapangan dan (2) akan berfungsi (tidak crash) ketika ada jenis konten lain tanpa bidang Gambar? Terima kasih!
Greg
1) Ya, seharusnya. 2) Anda bisa mengubah pernyataan if menjadi if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE').
tim.plunkett
4
Atau cukup && menerbitkan ($ entitas-> konten ['field_image']), maka Anda tidak perlu memperbarui kode ketika menambahkan bidang ke jenis konten lain atau mengubah nama itu, atau .. :)
Berdir
Hmmm. Ini mungkin berhasil, tetapi ini adalah contoh memasukkan ke dalam kode apa yang seharusnya ada dalam tema.
artfulrobot
Ini akan berhasil, tetapi jika Anda menyelesaikan berpikir seperti ini dengan kode kustom situs akan kurang terpelihara di masa depan. Gunakan beberapa modul dari drupal.org yang disebutkan dalam jawaban lain sebagai gantinya.
Bobik
12

Tidak perlu menulis kode khusus.

Coba gunakan modul beberapa bidang Field .

Ini memungkinkan Anda untuk masuk ke pengaturan tampilan untuk jenis konten Anda dan mengkonfigurasi pengaturan penggoda untuk hanya menampilkan sejumlah nilai tertentu. Anda bahkan dapat membuatnya melewati katup, misalnya jika Anda ingin menampilkan nilai 2 hingga 5

.

jorok
sumber
4

Jika menggunakan templat penggoda (yaitu: node - CONTENT-TYPE - teaser.tpl.php ), ini berfungsi:

  <?php print render($content['IMAGE-FIELD'][0]); ?>
nelslynn
sumber
1

Saya menggunakan hook_field_extra_fields () dan hook_node_view () untuk membuat bidang baru untuk menampilkan gambar pertama sehingga saya tidak merusak bidang gambar asli.

hook_field_extra_fields () menginisialisasi bidang baru yang akan muncul pada tab tampilan kelola jenis simpul Anda.

function HOOK_field_extra_fields() {
  $extra['node']['NODE_TYPE'] = array(
    'display' => array(
      'primary_image' => array(
        'label' => t('Primary Image'),
        'weight' => 0,
      )
    ),
  );
  return $extra;
}

Kemudian hook_node_view () digunakan untuk menambahkan gambar pertama menjadi konten bidang baru Anda.

function HOOK_node_view($node, $view_mode, $langcode) {
  if($node->type == 'NODE_TYPE' && $view_mode == 'teaser') {

    //make sure there are images
    if(!empty($node->field_images)) {
      $node->content['primary_image'] = $node->content['field_images'][0];

      //hide the original field with multiple images
      hide($node->content['field_images']);
    }
  }
}

CATATAN: Jika Anda telah mengaktifkan suite display, Anda dapat melakukan ini di tab kelola display.

Teegan
sumber