Làm thế nào để cung cấp mẫu cho chế độ xem cụ thể?


46

Tôi muốn chủ đề chế độ xem kết quả tìm kiếm với một mẫu.

Tôi đã nghĩ rằng việc đặt tên một nút tệp mẫu - bài viết - search-result.tpl.php sẽ thực hiện được mẹo, nhưng rõ ràng tôi đã sai về điều đó.

Tôi nhận ra rằng tôi có thể thực hiện nút - article.tpl.php và trong kiểm tra này $ view_mode, nhưng điều này thật khó xử với tất cả các chế độ xem khác mà tôi không muốn tạo mẫu.

Ý tưởng?

Câu trả lời:


45

Thêm đề xuất móc chủ đề trong chức năng tiền xử lý nút sẽ thực hiện thủ thuật:

function MYMODULE_preprocess_node(&$vars) {
  if ($vars['node']->type == 'article' && $vars['view_mode'] == 'search_result') {
    $vars['theme_hook_suggestions'][] = 'node__article__search_result';
  }
}

Sau khi xóa bộ nhớ cache, bạn sẽ có thể sử dụng nút - bài viết - search-result.tpl.php cho tên tệp mẫu của bạn.

Lưu ý Bạn cũng có thể làm điều này trong tệp template.php của chủ đề bằng cách gọi hàm MYTHEME_preprocess_node()thay thế.


2
Xuất sắc! Cảm ơn bạn. Chỉ là để thêm một liên kết đến cùng một lời khuyên ở đây: mearra.com/bloss/juha-niemi/drupal-7-custom-node-view-modes
artfulrobot

1
Không có vấn đề gì :) Chỉ cần FYI, search_resultđã được khai báo là chế độ xem, do đó bạn không cần phải thực hiện hook_entity_info_alter()trong trường hợp của mình
Clive

3

Các Entity xem chế độ mô-đun bổ sung thêm những mẫu gợi ý tự động

Drupal 7 kế thừa chế độ Xây dựng sẽ cho phép quản trị viên xác định chế độ xem tùy chỉnh cho các thực thể. Các thực thể tùy chỉnh được thêm vào sổ đăng ký thực thể thông qua hook_entity_info_alter () để chúng có sẵn cho bất kỳ mã nào sử dụng entity_get_info () để cung cấp danh sách các chế độ xem cho thực thể. Điều này bao gồm các trường tham chiếu nút và người dùng, Chế độ xem, v.v.


2

Đây là một chức năng cho phép bạn thêm những cái mới một cách linh hoạt. Nó cũng gọi hàm tiền xử lý tương ứng nếu bạn có một khai báo.

Sau đó gọi drush cache-clear theme-registryđể làm cho nó hoạt động.

Để sử dụng nó thay thế THEME bằng tên chủ đề của bạn và đặt nó trong tệp tin template.php của chủ đề.

ví dụ: Đối với một chủ đề có tên Droid, bạn sẽ gọi nó droid_preprocess_node(&$variables, $hook) {...

function THEME_preprocess_node(&$variables, $hook) {
  $view_mode = $variables['view_mode'];
  $content_type = $variables['type'];
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode;
  $variables['theme_hook_suggestions'][] = 'node__' . $view_mode . '_' . $content_type;

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode . '_' . $content_type;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }

  $view_mode_preprocess = 'THEME_preprocess_node_' . $view_mode;
  if (function_exists($view_mode_preprocess)) {
    $view_mode_preprocess($variables, $hook);
  }
}
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.