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.