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?

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.


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

.


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]); ?>

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.