Limitar Teaser para exibir apenas o primeiro valor de um Campo

14

Eu tenho um tipo de conteúdo com um campo de imagem. Este campo normalmente será preenchido com 0 a 4 valores. Por padrão, o teaser desse tipo de conteúdo gera todas as imagens de 0 a 4. Como ajustar o teaser para exibir apenas a primeira imagem?

Greg
fonte

Respostas:

12

Crie um módulo personalizado, substitua MODULENAMEpelo nome do módulo e field_imagepelo nome do seu 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);
  }
}

Veja a documentação do hook_entity_view () para mais detalhes.

tim.plunkett
fonte
Isso parece promissor, vou tentar. Pode demorar alguns dias até que eu possa implementá-lo e reportá-lo. Sou relativamente novo em escrever módulos, por isso tenho algumas perguntas: (1) seu código de exemplo funcionará (não travará) quando houver zero valor no campo e (2) funcionará (não travará) quando houver outros tipos de conteúdo sem o campo Imagem? Obrigado!
Greg
1) Sim, deveria. 2) Você pode alterar a declaração if if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE').
tim.plunkett
4
Ou simplesmente && isset ($ entity-> content ['field_image'])), então você não precisa atualizar o código ao adicionar o campo a outro tipo de conteúdo ou renomear esse, ou .. :)
Berdir
Hummm. Isso pode funcionar, mas é um exemplo de colocar em código o que deveria estar em um tema.
Artfulrobot
Funcionará, mas se você resolver pensar assim por código personalizado, o site será menos sustentável no futuro. Use algum módulo do drupal.org mencionado em outras respostas.
Bobík
12

Não há necessidade de escrever código personalizado.

Tente usar o módulo de limite múltiplo de campo .

Ele permite que você acesse as configurações de exibição do seu tipo de conteúdo e defina as configurações do teaser para exibir apenas uma certa quantidade de valores. Você pode até fazer pular valores, por exemplo, se desejar exibir os valores 2 a 5

.

rooby
fonte
4

Se você estiver usando um modelo de teaser (por exemplo: node - CONTENT-TYPE - teaser.tpl.php ), isso funcionará:

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

Usei hook_field_extra_fields () e hook_node_view () para criar um novo campo para exibir a primeira imagem, para que eu não estivesse mexendo no campo de imagens originais.

hook_field_extra_fields () inicializa o novo campo que aparecerá na guia gerenciar exibição do seu tipo de nó.

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

Então hook_node_view () é usado para adicionar a primeira imagem ao conteúdo do seu novo 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 você tiver o conjunto de telas ativado, poderá fazê-lo na guia Gerenciar telas.

Teegan
fonte