як визначити функцію попередньої обробки сутності


10

Мій спеціальний модуль визначає спеціальну сутність, яка розширює клас EntityAPIController. Мені вдалося зробити це в основному спрацьованим, тобто відображаючи поля тощо за допомогою власного файлу tpl.php. Але я хотів би створити mymodule_preprocess_entityфункцію (як тут пропонується ), щоб додати спеціальні змінні у файл tpl.php. Але така функція не працює (не називається).

Крім того, коли я відображав цю сутність, я помітив, що функція template_preprocess_entity(&$variables)від entit.module також не працює.

Що ще потрібно визначити, щоб зробити функцію попередньої обробки для виклику користувальницької сутності?


ви використовуєте mymodule - пропозиція використовує mytheme
rémy

Відповіді:


9

Я створив загальну mymodule_preprocess(&$variables, $hook)функцію, і вона показала, що назва конкретної функції має бути mymodule_preprocess_myentity. Де myentityвласна назва організації.

Отже, цей код працює для мене:

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

Більш загальний підхід:

/**
 * 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);
    }
  }
}

На жаль module_implements(), не перевіряється, чи активна тема реалізує гачок попередньої обробки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.