Teaser'ı bir Alanın yalnızca ilk değerini görüntüleyecek şekilde sınırlama


14

Görüntü Alanı olan bir İçerik Türüm var. Bu alan tipik olarak 0 ila 4 değerle doldurulur. Varsayılan olarak, bu İçerik Türü için iltifat 0 ila 4 resmin tümünü çıkarır. Teaser'ı yalnızca ilk resmi görüntüleyecek şekilde nasıl ayarlayabilirim?

Yanıtlar:


12

Özel bir modül oluşturun MODULENAME, modülün field_imageadıyla ve alanınızın adıyla değiştirin:

/**
 * 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);
  }
}

Daha fazla bilgi için hook_entity_view () belgelerine bakın.


Bu umut verici görünüyor, bir deneyeceğim. Uygulayabilmem ve rapor verebilmem birkaç gün alabilir. Ben modülleri yazma nispeten yeniyim, bu yüzden birkaç soru var: (1) alanında sıfır değerleri olduğunda örnek kod çalışır (çökme değil) ve (2) olduğunda (çökme değil) çalışır Görüntü alanı olmayan diğer içerik türleri? Teşekkürler!
— Greg

1) Evet, olmalı. 2) if ifadesini olacak şekilde değiştirebilirsiniz if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE').
— tim.plunkett 15:11

4
Ya da sadece && isset ($ entity-> content ['field_image']), alanı başka bir içerik türüne eklerken veya yeniden adlandırırken kodu güncellemenize gerek yoktur ya da .. :)
— Berdir

Hmmm. Bu işe yarayabilir, ancak bir temada ne olması gerektiğini koda sokmanın bir örneğidir.
— artfulrobot

Çalışır, ancak özel kodla böyle düşünürseniz, site gelecekte daha az korunabilir olacaktır. Bunun yerine diğer yanıtlarda belirtilen drupal.org'dan bir modül kullanın.
— Bobík

12

Özel kod yazmaya gerek yok.

Field çoklu limit modülünü kullanmayı deneyin .

İçerik türünüz için ekran ayarlarına gitmenize ve teaser ayarlarını yalnızca belirli bir miktarda değeri görüntüleyecek şekilde yapılandırmanıza olanak tanır. Hatta değerleri atlamayı bile yapabilirsiniz, örneğin 2 ile 5 arasındaki değerleri görüntülemesini istiyorsanız

.


4

Bir teaser şablonu (yani: node - CONTENT-TYPE - teaser.tpl.php ) kullanıyorsanız, bu işe yarar :

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

1

İlk görüntüleri görüntülemek için yeni bir alan oluşturmak için hook_field_extra_fields () ve hook_node_view () kullandım, böylece orijinal görüntüler alanını kurcalamıyordum.

hook_field_extra_fields (), düğüm türünüzün ekran yönetme sekmesinde görünecek yeni alanı başlatır.

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

Ardından yeni alanınızın içeriği olacak ilk resmi eklemek için hook_node_view () kullanılır.

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']);
    }
  }
}

NOT: Ekran paketini etkinleştirdiyseniz, bunu ekran yönetimini yönet sekmesinden yapabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.