Drupal 8 - 忽略上下文过滤器

时间:2018-02-15 08:25:01

标签: drupal drupal-views drupal-8 drupal-contextual-filters

在搜索视图上,链接到搜索API和构面,我想在我的内容类型上添加上下文过滤器。 此内容类型具有引用的实体字段,链接到分类术语(从目标词汇表到分类法的一个字段,从活动词汇表到分类法)

所以,我创建了2个上下文过滤器,每个过滤器对应一个"分类法字段"。

view

filter

但是,我似乎只应用了第一个过滤器(目标)。如果我的URL中的分类术语是目标,则视图会显示正确的结果。但如果它是一项活动,它会显示所有内容。所以我认为上下文过滤器验证器存在问题:'如果过滤器值未验证'应该有类似“忽略过滤器'选项,因为显示指定字段的所有结果',它会显示所有内容,但不会执行下一个过滤器。

任何人都有解决方案吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

最后,我找到了一个解决方案,只是改变了pre_build中的视图

/**
* Implements hook_views_pre_build().
*/

function my_module_views_pre_build(ViewExecutable $view)
{
    if ($view->id() == 'tour_search' && $view->current_display == 'tours_taxonomy') {

        $tid = reset($view->args);

        if (! $tid) {
            return;
        }

        /** @var Term $term */
        $term = Term::load($tid);

        if ($term->getVocabularyId() === 'activities') {
            unset($view->argument['field_tour_destination']);
            return;
        }

        if ($term->getVocabularyId() === 'destinations') {
            unset($view->argument['field_tour_activity']);
            return;
        }

        return;
    }
}

我在这个钩子中移动了验证逻辑,通过简单的术语词汇测试取消过滤器。

希望它会帮助某人!