Категория:
Опубликовано:

Свой темплейт с возможностью переопределения

temlate

Часто приходится создавать свои шаблоны для тех или иных целей.

Например, создавая свой дисплей материала (View Mode), нужно определить для него стандартный шаблон. Но при этом должна быть возможность его переопределения из темы.

Вот как это можно сделать.

Разбираем на примере:

Изначально - создаем новый дисплей - "new_display" (как создавать собственные View Mode).

Теперь определим для него шаблон в hook_preprocess_node():

/**
 * Implements hook_preprocess_node().
 */
function MY_MODULE_preprocess_node(&$vars) {
  if($vars['view_mode'] == 'new_display') {
    array_unshift($vars['theme_hook_suggestions'], 'node__' . $vars['node']->type . '__new_display');
    array_unshift($vars['theme_hook_suggestions'], 'node__' . $vars['node']->nid . '__new_display');
  }
}

Таким образом мы подключили шаблон типа
node--[TYPE | NID]--new_display.tpl.php

Далее, зарегистрируем созданный шаблон и запрограммируем проверять его в нашем модуле:

/**
 * Implements hook_theme_registry_alter().
 */
function MY_MODULE_theme_registry_alter(&$theme_registry) {
  // Определяем путь к нашему модулю.
  $module_path = drupal_get_path('module', 'MY_MODULE');
  // Рекурсивно находим все файлы .tpl.php в папке нашего модуля.
  $template_file_objects = drupal_find_theme_templates($theme_registry, '.tpl.php', $module_path);
  // Перебрать все найденные шаблоны.
  foreach ($template_file_objects as $key => $template_file_object) {
      // Если шаблон еще не был переопределен в теме.
      if (!isset($theme_registry[$key]['theme path']) || !preg_match('#/themes/#', $theme_registry[$key]['theme path'])) {
        // Определяем путь к шаблону и добавляем в регистр.
        $theme_registry[$key]['theme path'] = $module_path;
        $theme_registry[$key] = array_merge($theme_registry[$key], $template_file_object);
        $theme_registry[$key]['type'] = 'module';
      }
  }
}

Не забываем менять значения "MY_MODULE" и "new_display" на свои! Так же поступаем с именем шаблонов. Обязательно чистим кеш после внесения правок.

Готово. Теперь создаем шаблон в папке своего модуля шаблон для нужного типа материала и настраиваем его под себя.

Если возникнет необходимость - шаблон можно будет переопределить в своей теме просто скопировав его туда.

Подсмотрено здесь.

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