Drupal 9 - Breadcrumbs не отображаются в Views

Главные вкладки

Аватар пользователя almador almador 9 октября 2022 в 23:25

Всем доброго времени суток!

Как в Drupal 9 получить данные view c контекстным фильтром програмно через кастомный модуль?

В частности хотелось бы получить одно из значений полей вьюшки для вывода breadcrumbs.

Пробовал через файл темы хуком preprocess_breadcrumb

<?php
function mytheme_preprocess_breadcrumb(&$variables)
{
    
$view = \Drupal\views\Views::getView('category');
    
$view->setDisplay('page_1');
        
$view->execute();
    
$view_result $view->result;

    

// первый способ 
        
foreach($view->result as $row){
         
$view_rows $row->_entity->get('field_category')->getValue();
    }

    

// второй способ
        
foreach ($view as $id => $row) {
         foreach (
$view->field as $fid => $field) {
             if (
$fid == 'field_category') {
                 
//Get the full name value.
                 
$name $field->getValue($row);
                 
//ksm ($name);
                 
$category $field->advancedRender($row)->__toString();
             }
         }
    }
    
$route = \Drupal::routeMatch()->getRouteObject();
    
$request = \Drupal::request();

    if (

$route) {
        
$view_id $route->getDefault('view_id');
        if (!empty(
$view_id) && $view_id =='category') {
            
$page_title = \Drupal::service('title_resolver')->getTitle($request$route);
            
$variables['breadcrumb'][] = array(
                
'text' => $name
            
);
        }
    }
}
?>

Но в xdebug постоянно получаю пустые значения.

Стоит ли попробовать перенести в кастомный модуль и использовать хук system_breadcrumb_alter?

Или какой-то другой хук? В общем интересует как правильно получить поля вьюшки и значение контекстного фильтра.

Комментарии

Аватар пользователя almador almador 14 октября 2022 в 0:38

Я знал, что Вы это предложите! Читал в комментариях, что Вы именно так реализуете хлебные крошки.

Пока что сделал через кастомный модуль, еще обкатываю его.

Пошел другим путем - данные контекстного фильтра получил через \Drupal::routeMatch()->getParameter('arg_0'), потом сделал проход циклом по словарю таксономии и сравнил содержимое полей. При совпадение имя термина и ссылка отправляются в хлебную крошку, это если вкратце.

з.ы. тем не менее я все еще в поиске по поводу того как получить програмно данные полей представления с контекстным фильтром.