[РЕШЕНО]Как выпилить хлебные крошки из views?

Аватар пользователя gun_dose gun_dose 23 февраля 2016 в 8:36

создал я вьюс с двумя контекстными фильтрами. Появились два вагончика хлебных крошек, с одинаковыми названиями, но разными ссылками и обе ссылки получаются битые. Ну думаю ладно, делов то, имплементнул хукца hook_menu_breadcrumb_alter. Сбросил полностью в нём $active_trail и собрал его заново. Получилось то, что нужно, но те самые два "вагончика", сгенерированные вьюсом, так никуда и не делись, а пристроились в конце моих крошек как-то вот так:
крошка моя
То, что обведено красным, нужно убрать, но не знаю где - в препроцессе будет уже хтмл и его программно не очень удобно распознавать, т.к. эту операцию нужно делать на странице только одного вьюса. hook_menu_breadcrumb_alter тоже не подходит, потому что крошки вьюса почему-то выставляются уже после этого хука.
С помощью профайлинга удалось установить, что крошки вызываются из файла views.inc конкретно из этого места:

($this->display_handler->uses_breadcrumb() && $argument->uses_breadcrumb()) {
          
$path $this->get_url($breadcrumb_args);
          if (
strpos($path'%') === FALSE) {
            if (!empty(
$argument->options['breadcrumb_enable']) && !empty($argument->options['breadcrumb'])) {
              
$breadcrumb $argument->options['breadcrumb'];
            }
            else {
              
$breadcrumb $title;
            }
            
$this->build_info['breadcrumb'][$path] = str_replace(array_keys($substitutions), $substitutions$breadcrumb);
          }
        }
?>

Интуитивно тут понятно, что где-то должна стоять галочка, которая выключает крошки для вьюса, но я уже всё облазил и нигде не нашёл. Галочка "переопределить навигационную линейку" не имеет никакого эффекта.
================================================================================
UPD: вопрос решил следующим образом:

function modulename_views_post_build(&$view){
    if(
$view->name == 'my_view' && $view->current_display == 'my_display'){
    unset(
$view->build_info['breadcrumb']);}
}
?>

Мои крошки остались на месте, дефолтные ушли.

ВложениеРазмер
Иконка изображения bread.png6.71 КБ
0 Thanks

Комментарии

Аватар пользователя gun_dose gun_dose 23 февраля 2016 в 13:55
bumble wrote:

А точно в настройках фильтров не переопределялось? Может закешило просто?

Нет никаких переопределялок крох?

В templates.php не внедряет свои?

Из указанных модулей ничего нет. Плюс профайлинг явно указывает, что drupal_set_breadcrumbs вызывается из views.inc. Да и смысла устанавливать стандартные "крошечные" модули мне тоже особо нет, потому что самые ядрёные крошки должны устанавливаться с учётом принадлежности к органик групс и через таксономию одновременно. Но это в нодах, там я своим модулем всё переопределил. А вот вьюс упорно пилит откуда-то свои. Причём если в контекстном фильтре поставить галку "переопределить навигационную линейку" и написать что-то в окошко, то написанный текст показывается в крошках. Если оставить окошко пустым, при выставленной галке, то выводится то, что у меня на картинке и то же самое при снятой галке. Чую придётся вручную перебирать хуки для вьюса, чтобы откопать, на каком этапе можно выпилить ненужную часть.

Аватар пользователя bumble bumble 23 февраля 2016 в 14:57

Пои идее, не должен просто так вставлять.
А "своим модулем всё переопределил" - там может подхватывает как?

Аватар пользователя gun_dose gun_dose 23 февраля 2016 в 15:37

так оно и без моего модуля выдаёт то же самое. Модулем удалось только в начало цепочки добавить нужные звенья, а те, что в конце - остались

Аватар пользователя gun_dose gun_dose 23 февраля 2016 в 16:34

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

Тем не менее, удалось найти, где вьюс генерит свои крошки -
через hook_views_post_build(&$view) их можно найти в переменной $view->build_info['breadcrumb']