Giới hạn Teaser chỉ hiển thị giá trị đầu tiên của Trường


14

Tôi có Loại Nội dung với Trường Hình ảnh. Trường này thường sẽ được điền với 0 đến 4 giá trị. Theo mặc định, lời trêu ghẹo cho Loại nội dung này xuất ra tất cả 0 đến 4 hình ảnh. Làm cách nào tôi có thể điều chỉnh Teaser để chỉ hiển thị hình ảnh đầu tiên?

Câu trả lời:


12

Tạo một mô-đun tùy chỉnh, thay thế MODULENAMEbằng tên của mô-đun và field_imagebằng tên của trường của bạn:

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

Xem tài liệu hook_entity_view () để biết thêm chi tiết.


Điều này có vẻ hứa hẹn, tôi sẽ thử. Có thể là một vài ngày trước khi tôi có thể thực hiện nó và báo cáo lại. Tôi còn khá mới để viết mô-đun, vì vậy tôi có một vài câu hỏi: (1) mã mẫu của bạn có hoạt động không (không gặp sự cố) khi không có giá trị nào trong trường và (2) nó có hoạt động không (không gặp sự cố) khi có loại nội dung khác mà không có trường hình ảnh? Cảm ơn!
Greg

1) Có, nó nên. 2) Bạn có thể thay đổi câu lệnh if thành if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE').
tim.plunkett

4
Hoặc chỉ đơn giản là && isset ($ entity-> content ['field_image']), sau đó bạn không cần cập nhật mã khi thêm trường vào loại nội dung khác hoặc đổi tên loại đó, hoặc .. :)
Berdir

Hừm. Điều này có thể hoạt động, nhưng đó là một ví dụ về việc đưa vào mã những gì nên có trong một chủ đề.
artfulrobot

Nó sẽ hoạt động, nhưng nếu bạn giải quyết được suy nghĩ như thế này bằng mã tùy chỉnh, trang web sẽ ít được bảo trì hơn trong tương lai. Sử dụng một số mô-đun từ drupal.org được đề cập trong các câu trả lời khác thay thế.
Bobík

12

Không cần phải viết mã tùy chỉnh.

Hãy thử sử dụng mô-đun nhiều giới hạn Trường .

Nó cho phép bạn đi vào cài đặt hiển thị cho loại nội dung của mình và định cấu hình cài đặt trêu ghẹo để chỉ hiển thị một lượng giá trị nhất định. Bạn thậm chí có thể làm cho nó bỏ qua các giá trị, ví dụ nếu bạn muốn nó hiển thị các giá trị 2 đến 5

.


4

Nếu sử dụng một mẫu trêu ghẹo (ví dụ: nút - NỘI DUNG-TYPE - teaser.tpl.php ), thì điều này hoạt động:

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

1

Tôi đã sử dụng hook_field_extra_fields () và hook_node_view () để tạo trường mới để hiển thị hình ảnh đầu tiên để tôi không bị giả mạo với trường hình ảnh gốc.

hook_field_extra_fields () khởi tạo trường mới sẽ xuất hiện trên tab hiển thị quản lý loại nút của bạn.

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

Sau đó hook_node_view () được sử dụng để thêm hình ảnh đầu tiên làm nội dung của trường mới của bạn.

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

LƯU Ý: Nếu bạn đã bật bộ hiển thị, bạn có thể thực hiện việc này trong tab quản lý hiển thị.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.