Chức năng chủ đề tùy chỉnh không được gọi?


8

Tôi đang xây dựng mô-đun Drupal 7 để tạo loại trường bespoke. Tôi đã thực hiện tất cả các móc cần thiết. hook_field_formatter_view()Chức năng của tôi trông như thế này:

function MYMODULE_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();

  switch ($display['type']) {
    case 'default':
      foreach ($items as $delta => $item) {
                $element[$delta] = array(
                  '#theme' => 'test',
                  '#item' => $item,
                );
      }
      break;
  }

  return $element;  
}

Sau đó, tôi đã xác định theme()chức năng dưới đây:

function theme_test($variables) {
    return '<h1>Hello World</h1>';
}

Nhưng khi tôi xem trang không có gì là đầu ra. Nếu tôi nhìn vào các mục nhật ký gần đây, tôi thấy thông báo này:

Theme key 'test' not found.

Nếu tôi thay đổi giá trị '#theme' của mảng MYMODULE_field_formatter_view thành hàm chủ đề được tích hợp sẵn như 'item_list' thì nó hoạt động. Nhưng vì một số lý do, chức năng chủ đề tùy chỉnh của tôi không được chọn.

Tôi đã xây dựng lại sổ đăng ký chủ đề hàng trăm lần cũng như xóa bộ nhớ cache.

Câu trả lời:


12

Bạn có thể chưa xác định móc chủ đề của bạn trong hook_theme().

Phần Sử dụng lớp chủ đề của cẩm nang Phát triển có một cuộc thảo luận chuyên sâu về vấn đề này.


Tại chỗ, tôi tiếp tục bị cuốn theo những thay đổi nhỏ này từ Drupal 6 đến Drupal 7!
Camsoft

4
Các chức năng chủ đề cũng phải được đăng ký trong Drupal 6.
Berdir

10

Bạn cần xác định chức năng chủ đề trong hook_themevà sau đó xóa bộ đệm.

 function MYMODULE_theme() {
   return array(
     'test' => array (
       'render element' => 'element',
     ),
   );
 }

2

Tôi đã phải đối mặt với cùng một vấn đề trong đó chức năng chủ đề tùy chỉnh của tôi không bao giờ được gọi trong mẫu của tôi, mặc dù nó đã được đăng ký. Khi tôi chuyển sang chủ đề khác, nó đã hoạt động.

Giải pháp của tôi là đặt lại chủ đề thành 'Something_theme', vì tôi đã mắc một lỗi ngu ngốc và đã có mô-đun có tên là 'cái gì đó'.

Mô-đun và chủ đề không bao giờ nên có cùng tên , vì nó dẫn đến va chạm gây ra hành vi không mong muốn và móc nối.

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.