Кастомизация хлебных крошек и заголовков страниц представлений

Хлебные крошки и тайтлы, выводимые на страницах вьюсов, порой нуждаются в изменениях, которые невозможно сделать из админки самого представления. В таких случаях можно вмешаться программно и изменить крошки и заголовок страницы вьюшки. Для этого подходит hook_views_post_build(), который выполняется после сборки представления, в самом конце views::build(), при этом SQL запрос уже построен, но ещё не передан в db_rewrite_sql().

Рассмотрим на конкретном примере. У нас имеется интернет-магазин подарков и нужно видоизменить страницу представления taxonomy/term/%.
На сайте имеется словарь терминов категорий, который имеет примерно такую структуру
...
-Электронные подарки
--Игрушки
--Флешки
--Интересные устройства
--Видеоняни
--Радионяни
--Видеомаски и экшен камеры
--Роботы-пылесосы
--Массажёры
-Радиоуправляемые модели
--Автомодели
--Вертолёты
--Квадрокоптеры
--Самолёты
--Судомодели
--Танки
...
И соответственно на странице "Автомодели" хлебные крошки выглядят следующим образом Главная >> Радиоуправляемые модели, если в настройках контекстного фильтра по tid установлен чекбокс "Set the breadcrumb for the term parents"("Установить хлебные крошки для родительского термина"). Но необходимо, чтобы крошки имели такой вид Главная >> Каталог >> Радиоуправляемые модели. При этом ссылка "Каталог" будет вести на страницу представления с урлом /catalog.

Имплементируем в своем модуле hook_views_post_build():


function MYMODULE_views_post_build(&$view) {
   if ($view->name == 'taxonomy_term' && $view->current_display == 'page') {
    $breadcrumbs = array('catalog' => t('Catalog'));
    $view->build_info['breadcrumb'] = $breadcrumbs + $view->build_info['breadcrumb'];
  }
}

Теперь хлебные крошки приняли после очистки кеша нужный вид. И далее нужно немного изменить тайтл, а точнее добавить к заголовку в скобках количество подарков относящихся к данной категории. Вообщем заголовок той же страницы должен быть "Автомодели (24)", где 24 - кол-во результатов выборки вьюса. В данном случае нужно уже обращаться к hook_views_pre_render(), чтобы узнать количество результатов выборки вьюса:


function MYMODULE_views_pre_render(&$view) {
   if ($view->name == 'taxonomy_term' && $view->current_display == 'page') {
    $total = $view->total_rows;
    $view->build_info['title'] = $view->build_info['title'] . ' (' .$total . ')';
  }
}

Ну вот собственно и все - тайтл и хлебные крошки приведены к нужному виду. Если при изменении крошек и заголовка нужны значения контекстных фильтров, то они будут содержаться в массиве $view->args.