Limit Teaser per visualizzare solo il primo valore di un campo


14

Ho un tipo di contenuto con un campo immagine. Questo campo verrà in genere popolato con valori da 0 a 4. Per impostazione predefinita, il teaser per questo tipo di contenuto produce tutte le immagini da 0 a 4. Come posso regolare il teaser per visualizzare solo la prima immagine?

Risposte:


12

Crea un modulo personalizzato, sostituiscilo MODULENAMEcon il nome del modulo e field_imagecon il nome del tuo campo:

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

Vedere la documentazione di hook_entity_view () per maggiori dettagli.


Sembra promettente, ci proverò. Potrebbero essere necessari un paio di giorni prima che io possa implementarlo e riferire. Sono relativamente nuovo nella scrittura di moduli, quindi ho un paio di domande: (1) il tuo codice di esempio funzionerà (non crash) quando ci sono valori zero nel campo e (2) funzionerà (non crash) quando ci sono altri tipi di contenuto senza il campo Immagine? Grazie!
— Greg

1) Sì, dovrebbe. 2) È possibile modificare l'istruzione if in if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE').
— tim.plunkett,

4
O semplicemente && isset ($ entity-> content ['field_image']), non è necessario aggiornare il codice quando si aggiunge il campo a un altro tipo di contenuto o si rinomina quello, o .. :)
— Berdir

Hmmm. Questo potrebbe funzionare, ma è un esempio di come inserire nel codice ciò che dovrebbe essere in un tema.
— artfulrobot,

Funzionerà, ma se risolvi il problema con questo codice personalizzato, il sito sarà meno gestibile in futuro. Usa invece un modulo di drupal.org menzionato in altre risposte.
— Bobík,

12

Non è necessario scrivere codice personalizzato.

Prova a utilizzare il modulo Limite multiplo campo .

Ti consente di accedere alle impostazioni di visualizzazione per il tuo tipo di contenuto e configurare le impostazioni del teaser per visualizzare solo una determinata quantità di valori. Puoi anche fargli saltare i valori, ad esempio se vuoi che mostri i valori da 2 a 5

.


4

Se si utilizza un modello di teaser (ovvero: nodo - CONTENT-TYPE - teaser.tpl.php ), funziona:

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

1

Ho usato hook_field_extra_fields () e hook_node_view () per creare un nuovo campo per visualizzare la prima immagine in modo da non alterare il campo delle immagini originali.

hook_field_extra_fields () inizializza il nuovo campo che apparirà nella scheda di gestione del tipo di nodo.

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

Quindi hook_node_view () viene utilizzato per aggiungere la prima immagine al contenuto del nuovo campo.

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

NOTA: se la suite di display è abilitata, è possibile farlo nella scheda Gestisci display.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.