Begrenzen Sie Teaser, um nur den ersten Wert eines Felds anzuzeigen

14

Ich habe einen Inhaltstyp mit einem Bildfeld. Dieses Feld wird normalerweise mit 0 bis 4 Werten ausgefüllt. Standardmäßig gibt der Teaser für diesen Inhaltstyp alle 0 bis 4 Bilder aus. Wie kann ich den Teaser so einstellen, dass nur das erste Bild angezeigt wird?

Greg
quelle

Antworten:

12

Erstellen Sie ein benutzerdefiniertes Modul, ersetzen Sie es MODULENAMEdurch den Namen des Moduls und field_imagedurch den Namen Ihres Feldes:

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

Weitere Informationen finden Sie in der Dokumentation zu hook_entity_view () .

tim.plunkett
quelle
Das sieht vielversprechend aus, ich werde es versuchen. Es kann ein paar Tage dauern, bis ich es implementieren und zurückmelden kann. Ich bin relativ neu im Schreiben von Modulen, daher habe ich ein paar Fragen: (1) Funktioniert Ihr Beispielcode (nicht stürzt ab), wenn das Feld Nullwerte enthält, und (2) Funktioniert er (nicht stürzt ab), wenn es solche gibt andere Inhaltstypen ohne das Feld Bild? Vielen Dank!
Greg
1) Ja, das sollte es. 2) Sie können die if-Anweisung so ändern, dass sie lautet if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE').
tim.plunkett
4
Oder einfach && isset ($ entity-> content ['field_image']), dann müssen Sie den Code nicht aktualisieren, wenn Sie das Feld einem anderen Inhaltstyp hinzufügen oder diesen umbenennen, oder .. :)
Berdir
Hmmm. Das mag funktionieren, aber es ist ein Beispiel für das Einfügen von Code in ein Thema.
Artfulrobot
Es wird funktionieren, aber wenn Sie dies durch benutzerdefinierten Code lösen, ist die Site in Zukunft weniger wartbar. Verwenden Sie stattdessen ein Modul von drupal.org, das in anderen Antworten erwähnt wurde.
Bobík,
12

Sie müssen keinen benutzerdefinierten Code schreiben.

Probieren Sie das Field Multiple Limit- Modul aus.

Sie können die Anzeigeeinstellungen für Ihren Inhaltstyp aufrufen und die Teasereinstellungen so konfigurieren, dass nur eine bestimmte Anzahl von Werten angezeigt wird. Sie können sogar festlegen, dass Werte übersprungen werden, wenn beispielsweise die Werte 2 bis 5 angezeigt werden sollen

.

Dummkopf
quelle
4

Wenn Sie eine Teaser-Vorlage verwenden (dh: node - CONTENT-TYPE - teaser.tpl.php ), funktioniert Folgendes :

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

Ich habe hook_field_extra_fields () und hook_node_view () verwendet, um ein neues Feld für die Anzeige des ersten Bildes zu erstellen, damit ich nicht am Feld für die ursprünglichen Bilder manipuliere.

hook_field_extra_fields () initialisiert das neue Feld, das auf der Registerkarte "Anzeige verwalten" Ihres Knotentyps angezeigt wird.

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

Dann wird hook_node_view () verwendet, um das erste Bild als Inhalt Ihres neuen Feldes hinzuzufügen.

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

HINWEIS: Wenn Sie die Anzeigesuite aktiviert haben, können Sie dies auf der Registerkarte "Anzeige verwalten" tun.

Teegan
quelle