Làm thế nào để thay đổi chế độ xem theo chương trình?


11

Tôi muốn thay đổi chế độ xem của nút theo chương trình. Tôi đã sử dụng hook_preprocess_node(&$vars)và đặt chế độ xem:

function moduleName_preprocess_node(&$vars) {
      // if conditions to apply particular view mode
      $vars['view_mode'] = 'teaser';
      $vars['elements']['#view_mode'] = 'teaser';
}

Nhưng điều này không hoạt động như mong đợi. Am i thiếu cái gì ở đây?


Bạn đã thử xem lại điều này? drupal.org/node/1334206
chrisjlee

Câu trả lời:


13

Việc thay đổi chế độ xem trong chức năng tiền xử lý đang thực hiện quá muộn.
Cách chính xác để thay đổi mô-đun khung nhìn là triển khai hook_entity_view_mode_alter () , được gọi trước khi nội dung thực thể được hiển thị. Ví dụ, trong node_view () , hook đó được gọi từ node_build_content () , đây là hàm đầu tiên được gọi từ node_view().

  if (!isset($langcode)) {
    $langcode = $GLOBALS['language_content']->language;
  }

  // Populate $node->content with a render() array.
  node_build_content($node, $view_mode, $langcode);

4
Cảm ơn bạn. Xin lưu ý rằng móc này yêu cầu drupal> = 7.17
cissharp

6

Nếu bạn chỉ cần thay đổi nó cho một số trang nhất định, tôi sẽ đề xuất Trang Chế độ xem . Nó khá tiện dụng và đơn giản để sử dụng.


Cảm ơn bạn. Nhưng tôi có kịch bản khác nhau. Tôi muốn sử dụng chế độ xem khác nhau cho các nút có cùng loại nội dung. Tôi muốn thay đổi chế độ xem trên phân loại tôi đã sử dụng trong nút. Ý tôi là các nút sẽ có cùng một mẫu URL.
cissharp
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.