создал я вьюс с двумя контекстными фильтрами. Появились два вагончика хлебных крошек, с одинаковыми названиями, но разными ссылками и обе ссылки получаются битые. Ну думаю ладно, делов то, имплементнул хукца hook_menu_breadcrumb_alter. Сбросил полностью в нём $active_trail и собрал его заново. Получилось то, что нужно, но те самые два "вагончика", сгенерированные вьюсом, так никуда и не делись, а пристроились в конце моих крошек как-то вот так:
То, что обведено красным, нужно убрать, но не знаю где - в препроцессе будет уже хтмл и его программно не очень удобно распознавать, т.к. эту операцию нужно делать на странице только одного вьюса. hook_menu_breadcrumb_alter тоже не подходит, потому что крошки вьюса почему-то выставляются уже после этого хука.
С помощью профайлинга удалось установить, что крошки вызываются из файла views.inc конкретно из этого места:
<?phpif ($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: вопрос решил следующим образом:
<?php function modulename_views_post_build(&$view){
if($view->name == 'my_view' && $view->current_display == 'my_display'){
unset($view->build_info['breadcrumb']);}
}?>
Мои крошки остались на месте, дефолтные ушли.
Вложение | Размер |
---|---|
bread.png | 6.71 КБ |
Комментарии
А точно в настройках фильтров не переопределялось? Может закешило просто?
Нет никаких переопределялок крох?
В templates.php не внедряет свои?
Из указанных модулей ничего нет. Плюс профайлинг явно указывает, что drupal_set_breadcrumbs вызывается из views.inc. Да и смысла устанавливать стандартные "крошечные" модули мне тоже особо нет, потому что самые ядрёные крошки должны устанавливаться с учётом принадлежности к органик групс и через таксономию одновременно. Но это в нодах, там я своим модулем всё переопределил. А вот вьюс упорно пилит откуда-то свои. Причём если в контекстном фильтре поставить галку "переопределить навигационную линейку" и написать что-то в окошко, то написанный текст показывается в крошках. Если оставить окошко пустым, при выставленной галке, то выводится то, что у меня на картинке и то же самое при снятой галке. Чую придётся вручную перебирать хуки для вьюса, чтобы откопать, на каком этапе можно выпилить ненужную часть.
Пои идее, не должен просто так вставлять.
А "своим модулем всё переопределил" - там может подхватывает как?
так оно и без моего модуля выдаёт то же самое. Модулем удалось только в начало цепочки добавить нужные звенья, а те, что в конце - остались
Народ их обычно выпиливает через theme_breadcrumb, что-то типа того https://api.drupal.org/api/drupal/includes!theme.inc/function/theme_brea...
оно то можно конечно, но тут крошки уже в хтмл и придётся их как-то парсить, выискивать по какому-то признаку, что это крошки вьюса, а не таксономии например.
Тем не менее, удалось найти, где вьюс генерит свои крошки -
через hook_views_post_build(&$view) их можно найти в переменной $view->build_info['breadcrumb']