Пользовательский интерфейс представлений Drupal 8: фильтрация по произвольному полю

Я довольно новичок в D8, и я пытаюсь сделать следующее:

У меня есть тип контента: фильм. В этом типе контента у меня есть настраиваемое поле api_id, которое представляет собой просто целое число.

Когда я нахожусь на странице фильма, я хочу отображать под содержимым блок с фильмами с тем же API_id.

Мне удалось создать блок для тех же фильмов от того же автора, но я не могу понять, как фильтровать по api_id (я так много играл с контекстными фильтрами...)

Любые идеи ? Спасибо


person FrenchBarbu    schedule 27.01.2016    source источник


Ответы (1)


Хорошо, мне удается делать то, что я хочу, с помощью hook_views_query_alter():

function my_module_views_query_alter(\Drupal\views\ViewExecutable $view, \Drupal\views\Plugin\views\query\QueryPluginBase $query)
{
    if($view->id() == 'my_view' && $view->current_display == 'my_block'){
        $movie= Node::load($view->args[0]);
        if(is_object($movie)) {
            foreach ($query->where as &$condition_group) {
                foreach ($condition_group['conditions'] as &$condition) {
                    if ($condition['field'] == 'node__field_id_movie.field_id_movie_value') {
                        $condition = array(
                            'field' => 'node__field_id_movie.field_id_movie_value',
                            'value' => $movie->get('field_id_movie')->value,
                            'operator' => '=',
                        );
                    }
                }
            }
        }
    }
}

Для этого вам нужно сначала создать представление с простым фильтром в поле, которое вы хотите переопределить.

person FrenchBarbu    schedule 27.01.2016