Limiter l'accroche pour afficher uniquement la première valeur d'un champ

14

J'ai un type de contenu avec un champ d'image. Ce champ sera généralement rempli de 0 à 4 valeurs. Par défaut, le teaser pour ce type de contenu affiche toutes les images de 0 à 4. Comment puis-je ajuster le Teaser pour afficher uniquement la première image?

Greg
la source

Réponses:

12

Créez un module personnalisé, remplacez-le MODULENAMEpar le nom du module et field_imagepar le nom de votre champ:

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

Voir la documentation hook_entity_view () pour plus de détails.

tim.plunkett
la source
Cela semble prometteur, je vais essayer. Il faudra peut-être quelques jours avant que je puisse le mettre en œuvre et faire rapport. Je suis relativement nouveau dans l'écriture de modules, j'ai donc quelques questions: (1) votre exemple de code fonctionnera-t-il (ne plantera-t-il pas) lorsqu'il y a zéro valeur dans le champ et (2) cela fonctionnera-t-il (ne plantera-t-il pas) lorsqu'il y a d'autres types de contenu sans le champ Image? Merci!
Greg
1) Oui, ça devrait. 2) Vous pouvez modifier l'instruction if pour qu'elle soit if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE').
tim.plunkett
4
Ou simplement && isset ($ entity-> content ['field_image']), alors vous n'avez pas besoin de mettre à jour le code lorsque vous ajoutez le champ à un autre type de contenu ou que vous le
renommez
Hmmm. Cela peut fonctionner, mais c'est un exemple de mise en code de ce qui devrait être dans un thème.
artfulrobot
Cela fonctionnera, mais si vous résolvez des idées comme celle-ci par un code personnalisé, le site sera moins maintenable à l'avenir. Utilisez plutôt un module de drupal.org mentionné dans d'autres réponses.
Bobík
12

Pas besoin d'écrire du code personnalisé.

Essayez d'utiliser le module de limites multiples Field .

Il vous permet d'accéder aux paramètres d'affichage de votre type de contenu et de configurer les paramètres d'accroche pour afficher uniquement une certaine quantité de valeurs. Vous pouvez même lui faire sauter des valeurs, par exemple si vous voulez qu'il affiche les valeurs 2 à 5

.

rooby
la source
4

Si vous utilisez un modèle d'accroche (ie: node - CONTENT-TYPE - teaser.tpl.php ), cela fonctionne:

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

J'ai utilisé hook_field_extra_fields () et hook_node_view () pour créer un nouveau champ pour afficher la première image afin de ne pas altérer le champ d'images d'origine.

hook_field_extra_fields () initialise le nouveau champ qui apparaîtra sur l'onglet d'affichage de gestion de votre type de nœud.

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

Ensuite, hook_node_view () est utilisé pour ajouter la première image comme contenu de votre nouveau champ.

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

REMARQUE: Si vous avez activé la suite d'affichage, vous pouvez le faire dans l'onglet gérer l'affichage.

Teegan
la source