пятница, 9 ноября 2012 г.

Сниппет для препроцессов шаблонов views в Drupal 7

В друпале 6 для каждого шаблона .tpl.php можно было написать препроцесс, и он бы обязательно вызвался.

В друпале 7 это изменилось, теперь вызов препроцесса для шаблона не является обязательным.

Следующая проблема встречается практически в каждом проекте:
Нельзя написать preprocess/process функцию для специфического шаблона вьюхи. Срабатывают только общие препроцессы:
  • mytheme_preprocess_views_view(&$vars) - общий для всех views
  • mytheme_preprocess_views_view_list(&$vars) - общий для всех views с list style
  • mytheme_preprocess_views_view_fields(&$vars) - общий для всех полей
  •  И другие. Остальные препроцессы смотрите в файле views/theme/theme.inc
На drupal.org есть тикет для 7 и 8 друпала, в котором обсуждается фикс этой проблемы, но задача в разработке. http://drupal.org/node/939462

Пока это не исправили, можно использовать сниппет, которого достаточно для большинства случаев. Если нужен еще 1 кейс, можно использовать этот пример.

/**
 * Process variables for views-view.tpl.php.
 *
 * @see views-view.tpl.php
 */
function mytheme_preprocess_views_view(&$vars) {
  if (isset($vars['theme_hook_suggestion'])) {
    $function = 'mytheme_preprocess_' . $vars['theme_hook_suggestion'];
    if (function_exists($function)) {
      $function($vars);
    }
  }
}

/**
 * Process variables for views-view-fields.tpl.php.
 *
 * @see views-view-fields.tpl.php
 */
function mytheme_preprocess_views_view_fields(&$vars) {
  if (isset($vars['theme_hook_suggestion'])) {
    $function = 'mytheme_preprocess_' . $vars['theme_hook_suggestion'];
    if (function_exists($function)) {
      $function($vars);
    }
  }
}

/**
 * Process variables for views-view-table.tpl.php.
 *
 * @see views-view-table.tpl.php
 */
function mytheme_preprocess_views_view_table(&$vars) {
  if (isset($vars['theme_hook_suggestion'])) {
    $function = 'mytheme_preprocess_' . $vars['theme_hook_suggestion'];
    if (function_exists($function)) {
      $function($vars);
    }
  }
}

/**
 * Process variables for views-view-unformatted.tpl.php.
 *
 * @see views-view-unformatted.tpl.php
 */
function mytheme_preprocess_views_view_unformatted(&$vars) {
  if (isset($vars['theme_hook_suggestion'])) {
    $function = 'mytheme_preprocess_' . $vars['theme_hook_suggestion'];
    if (function_exists($function)) {
      $function($vars);
    }
  }
}

Комментариев нет:

Отправить комментарий