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?

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.


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

.


4

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

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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.