Ogranicz teaser, aby wyświetlał tylko pierwszą wartość pola

14

Mam typ zawartości z polem obrazu. To pole zwykle wypełnia się wartościami od 0 do 4. Domyślnie zwiastun tego typu treści wyświetla wszystkie obrazy od 0 do 4. Jak mogę ustawić zwiastun, aby wyświetlał tylko pierwszy obraz?

Greg
źródło

Odpowiedzi:

12

Utwórz moduł niestandardowy, zastąp MODULENAMEgo nazwą modułu i field_imagenazwą pola:

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

Więcej informacji znajduje się w dokumentacji hook_entity_view () .

tim.plunkett
źródło
To wygląda obiecująco, spróbuję. Może minąć kilka dni, zanim będę mógł go wdrożyć i zgłosić. Jestem stosunkowo nowy w pisaniu modułów, więc mam kilka pytań: (1) czy Twój przykładowy kod będzie działał (nie powodował awarii), gdy w polu będzie zero wartości, i (2) będzie działał (nie powodował awarii), gdy istnieją inne typy zawartości bez pola Obraz? Dzięki!
Greg
1) Tak, powinno. 2) Możesz zmienić instrukcję if na if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE').
tim.plunkett 15.03.11
4
Albo po prostu && isset ($ entity-> Zawartość [ „field_image”]), wówczas nie trzeba aktualizować kodu przy rozbudowie boiska do innego typu zawartości lub zmiany nazwy, że jeden lub .. :)
Berdir
Hmmm. Może to działać, ale jest to przykład umieszczenia w kodzie tego, co powinno być w kompozycji.
artfulrobot
Będzie działać, ale jeśli rozwiążesz takie myśli za pomocą niestandardowego kodu, witryna będzie mniej konserwowalna w przyszłości. Zamiast tego użyj modułu z drupal.org wymienionego w innych odpowiedziach.
Bobík,
12

Nie musisz pisać niestandardowego kodu.

Spróbuj użyć modułu wielokrotnego ograniczenia pola .

Pozwala przejść do ustawień wyświetlania dla danego typu zawartości i skonfigurować ustawienia zwiastuna, aby wyświetlać tylko pewną liczbę wartości. Możesz nawet pomijać wartości, na przykład jeśli chcesz, aby wyświetlał wartości od 2 do 5

.

dureń
źródło
4

Jeśli używasz szablonu zwiastuna (tj .: węzeł - TYP TREŚCI - teaser.tpl.php ), działa to:

  <?php print render($content['IMAGE-FIELD'][0]); ?>
nelslynn
źródło
1

Użyłem hook_field_extra_fields () i hook_node_view (), aby utworzyć nowe pole do wyświetlania pierwszego obrazu, aby nie manipulować oryginalnym polem obrazów.

hook_field_extra_fields () inicjuje nowe pole, które pojawi się na karcie zarządzania wyświetlaniem typu węzła.

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

Następnie hook_node_view () służy do dodania pierwszego obrazu, który ma być zawartością nowego pola.

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

UWAGA: Jeśli masz włączony pakiet wyświetlania, możesz to zrobić na karcie zarządzania wyświetlaniem.

Teegan
źródło