필드의 첫 번째 값만 표시하도록 티저 제한


14

이미지 필드가있는 콘텐츠 유형이 있습니다. 이 필드는 일반적으로 0에서 4까지의 값으로 채워집니다. 기본적으로이 콘텐츠 유형의 티저는 0-4 개의 이미지를 모두 출력합니다. 티저를 조정하여 첫 번째 이미지 만 표시하려면 어떻게해야합니까?

답변:


12

대신, 사용자 정의 모듈을 만들고 MODULENAME모듈과 이름으로 field_image당신의 필드의 이름 :

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

자세한 내용은 hook_entity_view () 설명서를 참조하십시오.


이것은 유망한 것으로 보입니다. 나는 그것을 시도 할 것입니다. 구현하고보고하기까지 며칠이 걸릴 수 있습니다. 나는 모듈 작성에 비교적 익숙하지 않기 때문에 몇 가지 질문이 있습니다. (1) 필드에 0 값이 없을 때 샘플 코드가 작동합니까 (충돌하지 않음) 이미지 필드가없는 다른 컨텐츠 유형? 감사!
Greg

1) 그렇습니다. 2) if 문을로 변경할 수 있습니다 if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE').
tim.plunkett

4
또는 단순히 && isset ($ entity-> content [ 'field_image']), 다른 컨텐츠 유형에 필드를 추가하거나 이름을 바꿀 때 코드를 업데이트 할 필요가 없습니다. : :
Berdir

흠. 이것은 효과가있을 수 있지만 테마에 있어야 할 것을 코드에 넣는 예입니다.
artfulrobot

작동하지만 사용자 정의 코드로 이와 같은 생각을하면 나중에 사이트를 유지 관리하기가 쉽지 않습니다. 다른 답변에서 언급 한 drupal.org의 일부 모듈을 대신 사용하십시오.
Bobík

12

사용자 정의 코드를 작성할 필요가 없습니다.

필드 다중 한계 모듈을 사용해보십시오 .

콘텐츠 유형의 디스플레이 설정으로 이동하여 티저 설정이 특정 양의 값만 표시하도록 구성 할 수 있습니다. 예를 들어 값 2 ~ 5를 표시하려는 경우 골짜기를 건너 뛰도록 할 수도 있습니다.

.


4

티저 템플릿 (예 : node--CONTENT-TYPE--teaser.tpl.php )을 사용하는 경우 다음과 같이 작동합니다.

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

1

hook_field_extra_fields () 및 hook_node_view ()를 사용하여 원래 이미지 필드를 변경하지 않도록 첫 번째 이미지를 표시하는 새 필드를 작성했습니다.

hook_field_extra_fields ()는 노드 유형의 관리 디스플레이 탭에 나타날 새 필드를 초기화합니다.

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

그런 다음 hook_node_view ()는 새 필드의 내용이 될 첫 번째 이미지를 추가하는 데 사용됩니다.

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

참고 : 디스플레이 제품군을 활성화 한 경우 디스플레이 관리 탭에서이 작업을 수행 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.