web-dev-qa-db-fra.com

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

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?

14
Greg

Créez un module personnalisé, remplacez MODULENAME par le nom du module et field_image avec le nom de votre domaine:

/**
 * 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.

12
tim.plunkett

Pas besoin d'écrire du code personnalisé.

Essayez d'utiliser le module Field multiple limit .

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

.

12
rooby

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

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

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.

1
Teegan