Đề xuất mẫu cho chế độ xem 'trêu ghẹo' của nút là gì?


37

nút - [type | nodeid] .tpl.php nhắm đến chế độ xem mặc định của nút. Tuy nhiên tôi muốn ghi đè lên mẫu cho chế độ xem trêu ghẹo.

Đề xuất mẫu (tệp .tpl.php) cho chế độ xem 'trêu ghẹo' là gì?

Câu trả lời:


57

Tôi không nghĩ có một cái theo mặc định nhưng bạn có thể dễ dàng thêm một cái trong tệp template.php của mình:

function MYTHEME_preprocess_node(&$vars) {
  if($vars['view_mode'] == 'teaser') {
    $vars['theme_hook_suggestions'][] = 'node__' . $vars['node']->type . '__teaser';   
    $vars['theme_hook_suggestions'][] = 'node__' . $vars['node']->nid . '__teaser';
  }
}

Điều đó sẽ cho phép bạn sử dụng một tệp mẫu như: node--[type|nodeid]--teaser.tpl.php


3
Bạn cũng có thể chỉ cần kéo các biến trực tiếp từ mảng chứ không phải tham chiếu đối tượng nút quá ...
shaneonabike 6/12/14

1

Có một cách dễ dàng hơn để làm điều này, thông qua mô-đun chế độ xem Thực thể.

https://www.drupal.org/project/entity_view_mode

The Drupal 7 successor to Build modes which will allow administrators to 
define custom view modes for entities. Custom entities are added to the 
entity registry via hook_entity_info_alter() so they are available to any code
that uses entity_get_info() to provide a list of view modes for an entity. 
This includes node and user reference fields, Views, etc.

It also ensures consistency for template suggestions for all entity types, 
so that you can use any of the template patterns, in order of most specific 
to least specific:

entity-type__id__view-mode
entity-type__id
entity-type__bundle__view-mode
entity-type__bundle
entity-type

1

Đề xuất mẫu cho chế độ xem "trêu ghẹo" là:

node--[type]--teaser.tpl.php

Theo mặc định, chế độ xem "trêu ghẹo" sử dụng node.tpl.phpmẫu thông thường , do đó bạn có thể sao chép tệp đó để bắt đầu.

Bạn có thể xem tất cả các đề xuất mẫu bằng cách bật theme_debugchế độ, https://www.drupal.org/node/223440#theme-debug

Khi bạn xem nguồn: trên trang, bạn sẽ thấy các nhận xét HTML hiển thị toàn bộ danh sách các đề xuất mẫu mà Drupal đã xem xét.


0

Giải pháp của Clive là chính xác. Nhưng nếu bạn muốn các đề xuất mới được đánh giá sau các đề xuất mặc định, bạn phải thêm chúng vào các vị trí cuối cùng của mảng:

function MYTHEME_preprocess_node(&$vars) {
  if($vars['view_mode'] == 'teaser') {
    array_unshift($vars['theme_hook_suggestions'], 'node__' . $vars['node']->type . '__teaser');
    array_unshift($vars['theme_hook_suggestions'], 'node__' . $vars['node']->nid . '__teaser');
  }
}

Theo cách này, bạn tránh rằng nút trêu ghẹo của bạn khớp với (và sử dụng, nếu nó tồn tại) nút - [type] .tpl.php trước nút - [type] - teaser.tpl.php

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.