it-swarm-vi.com

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

Tôi đang xây dựng mô đun Drupal 7 để tạo loại trường bespoke. Tôi đã triển khai tất cả các hook cần thiết. Hàm hook_field_formatter_view() 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 hàm theme() bên dưới:

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.

8
Camsoft

Bạn có thể chưa xác định móc chủ đề của mình 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.

12
Damien Tournoud

Bạn cần xác định chức năng chủ đề trong hook_theme và sau đó xóa bộ nhớ cache.

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

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ờ 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à ghi đè.

2
bpile