Как мне включить файл TPL в моем модуле Drupal 7 - PullRequest
4 голосов
/ 23 ноября 2011

Я строю модуль с помощью hook_preprocess_node (). Я создал новый режим просмотра для сущности узла под названием «vacancy_teaser», используя hook_entity_info_alter ()

, это отображается в моих настройках отображения и просмотра

, поэтому я хочу использовать шаблон, включенный в мой модуль, когда используется этот режим просмотра.

мой код:

/**
* Implements hook_preprocess_node().
*/
function vacancies_preprocess_node(&$vars) {
  if($vars['view_mode'] == 'vacancy_teaser') {
    $vars['theme_hook_suggestions'][] = 'node_vacancy_teaser';
  }
} 

мой файл шаблона называется: ´node-vacancy-teaser.tpl.php´, но не используется в выводе моего представления $vars['view_mode'] == 'vacancy_teaser' в представлении.(проверено)

но где $vars['theme_hook_suggestions'][] = 'node_vacancy_teaser'; ищет файл шаблона?почему-то он не включен / не используется.

по-видимому, в drupal 7 использование подчеркивания дублирования требуется по некоторым причинам.node_ vacatures _vacancy_teaser.tpl.php, помещенный в папку с активным шаблоном, похоже, делает свое дело ... хотя я не думаю, что это изящное решение, поскольку файл tpl.php отделен от модуля.

Ответы [ 2 ]

7 голосов
/ 23 ноября 2011

Обязательно укажите файл шаблона в реализации hook_theme.Проект examples отлично подходит для выяснения деталей того, как делать подобные вещи.В частности, проверьте функцию theming_example_theme () в модуле theming_example

function theming_example_theme() {
  return array(
    // …
    'theming_example_text_form'  => array(
      'render element' => 'form',
      // In this one the rendering will be done by a tpl.php file instead of
      // being rendered by a function, so we specify a template.
      'template' => 'theming-example-text-form',
    ),
  );
}
0 голосов
/ 19 февраля 2014

Вместо добавления в конец массива $vars['theme_hook_suggestions'], попробуйте:

array_unshift($vars['theme_hook_suggestions'], 'node_vacancy_teaser');

Это передаст ваше предложение в начале массива, и он будет найденпервый.Скорее всего, поскольку вы добавляете его в конец массива, Drupal сначала находит предложение существующей темы и использует его вместо этого (например, node.tpl.php).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...