Limite Teaser para mostrar solo el primer valor de un campo

14

Tengo un tipo de contenido con un campo de imagen. Este campo normalmente se completará con 0 a 4 valores. De manera predeterminada, el avance para este tipo de contenido genera todas las imágenes de 0 a 4. ¿Cómo puedo ajustar el avance para mostrar solo la primera imagen?

Greg
fuente

Respuestas:

12

Cree un módulo personalizado, reemplácelo MODULENAMEcon el nombre del módulo y field_imagecon el nombre de su 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);
  }
}

Consulte la documentación de hook_entity_view () para obtener más detalles.

tim.plunkett
fuente
Esto parece prometedor, lo intentaré. Pueden pasar un par de días antes de que pueda implementarlo e informar. Soy relativamente nuevo en la escritura de módulos, así que tengo un par de preguntas: (1) funcionará su código de muestra (no se bloqueará) cuando haya valores cero en el campo y (2) funcionará (no se bloqueará) cuando haya otros tipos de contenido sin el campo Imagen? ¡Gracias!
Greg
1) Sí, debería. 2) Puede cambiar la declaración if para ser if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE').
tim.plunkett
44
O simplemente && isset ($ entity-> content ['field_image']), entonces no necesita actualizar el código al agregar el campo a otro tipo de contenido o cambiar el nombre de ese, o .. :)
Berdir
Hmmm Esto podría funcionar, pero es un ejemplo de poner en código lo que debería estar en un tema.
artfulrobot
Funcionará, pero si resuelve ideas como esta mediante un código personalizado, el sitio será menos mantenible en el futuro. Utilice algún módulo de drupal.org mencionado en otras respuestas.
Bobík
12

No es necesario escribir código personalizado.

Intenta usar el módulo de límite múltiple de campo .

Le permite acceder a la configuración de pantalla para su tipo de contenido y configurar los ajustes de presentación para mostrar solo una cierta cantidad de valores. Incluso puede hacer que omita valles, por ejemplo, si desea que muestre los valores 2 a 5

.

robo
fuente
4

Si utiliza una plantilla teaser (es decir, nodo - CONTENT-TYPE - teaser.tpl.php ), esto funciona:

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

Utilicé hook_field_extra_fields () y hook_node_view () para crear un nuevo campo para mostrar la primera imagen para no alterar el campo de imágenes original.

hook_field_extra_fields () inicializa el nuevo campo que aparecerá en la pestaña de visualización de gestión de su tipo de nodo.

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

Luego, hook_node_view () se usa para agregar la primera imagen para que sea el contenido de su nuevo 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: Si tiene habilitado el conjunto de pantallas, puede hacerlo en la pestaña Administrar pantalla.

Teegan
fuente