Làm thế nào để xác định chức năng tiền xử lý thực thể


10

Mô-đun tùy chỉnh của tôi định nghĩa một thực thể tùy chỉnh, mở rộng lớp EntityAPIContler. Tôi đã quản lý để làm cho nó hoạt động cơ bản, tức là hiển thị các trường, vv thông qua tệp tpl.php tùy chỉnh của tôi. Nhưng tôi muốn tạo một mymodule_preprocess_entityhàm (như được đề xuất ở đây ) để thêm các biến tùy chỉnh vào tệp tpl.php. Nhưng chức năng như vậy không chạy (không được gọi).

Ngoài ra, khi tôi hiển thị thực thể này, tôi nhận thấy rằng hàm template_preprocess_entity(&$variables)từ entity.module cũng không chạy.

Những gì khác cần phải được xác định để làm cho chức năng tiền xử lý cho thực thể tùy chỉnh được gọi?


bạn sử dụng mymodule - gợi ý sử dụng
huyền

Câu trả lời:


9

Tôi đã tạo ra một mymodule_preprocess(&$variables, $hook)hàm chung và nó cho thấy tên hàm cụ thể phải là mymodule_preprocess_myentity. Đâu myentitylà tên thích hợp của thực thể.

Vì vậy, mã này đang làm việc cho tôi:

function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) { // or maybe check for $hook name
    $function = __FUNCTION__ . '_' . $variables['elements']['#entity_type'];
    if (function_exists($function)) {
      $function($variables, $hook);
    }
  }
}

function mymodule_preprocess_myentity(&$vars) {
  ...
}

2

Một cách tiếp cận chung hơn:

/**
 * Implements hook_preprocess().
 */
function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) {
    $myhook = "preprocess_{$variables['elements']['#entity_type']}_{$variables['elements']['#bundle']}_{$variables['elements']['#view_mode']}";
    $modules = module_implements($myhook);

    foreach ($modules as $module) {
      $function = "{$module}_{$myhook}";
      $function($variables);
    }
  }
}

Thật không may module_implements(), không kiểm tra xem chủ đề đang hoạt động có thực hiện móc tiền xử lý hay không.

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.