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.