Моя пользовательская функция предварительной обработки работает, как только кэш очищен, а затем перестает работать


У меня есть пользовательский модуль Drupal 6 с пользовательской функцией темы. Я реализовал hook_theme в своем mymodule.module (основной файл модуля) следующим образом:


function mymodule_theme() {  
  return array(
    'mymodule_template_regions'   => array(
      'arguments' => array('template' => array()),
      'file'      => 'mymodule.theme.inc',
      'path'      => drupal_get_path('module', 'mymodule') . '/templates',
      'template'  => 'mymodule-template-regions',
    ),
  );
}

Я реализовал функцию mymodule_preprocess_mymodule_template_regions() в файле с именем mymodule.theme.inc в папке основного модуля.

Я разместил mymodule-template-regions.tpl.php в подпапке шаблоны внутри моей основной папки модуля.

Все это прекрасно работает, когда кэш очищен. Как только страница обновляется после первоначальной очистки кэша, она перестает работать.

Оскорбительной строкой является строка 696 theme.inc в ядре Drupal версии 6.19, в которой говорится:


if (function_exists($preprocess_function)) {
  call_user_func_array($preprocess_function, $args);
}

Когда кэш очищен, функция mymodule_preprocess_mymodule_template_regions существует, поэтому она вызывается, потому что оператор "если" выдает значение TRUE. Однако при каждом последующем запросе страницы функция не существует. Я предполагаю, что это связано с тем, что по какой-либо причине mymodule.theme.inc не является быть включенным.

Здесь мои знания о Drupal рушатся, так как я не знаю, что еще здесь происходит и как отследить, почему функция не включена. Похоже, что реестр тем все еще знает о mymodule_preprocess_mymodule_template_regions, но он просто не вызывается, потому что он не включен.

Author: Chris Cohen, 2011-04-14

1 answers

Drupal планирует включить следующий файл:

drupal_get_path('module', 'mymodule') . '/templates' . '/mymodule.theme.inc'

Но вы говорите, что поместили его в основную папку модуля, здесь:

drupal_get_path('module', 'mymodule') . '/mymodule.theme.inc'

Таким образом, Drupal не будет включать файл при последующих вызовах функции темы. Итак, вы, возможно, захотите переместить свой include.

Вы можете видеть это из того, как обрабатывается ваша hook_theme в: _theme_process_registry

 2
Author: Steven Jones, 2011-04-14 15:10:16