Drupal 8-忽略上下文过滤器

Drupal 8-忽略上下文过滤器,drupal,drupal-views,drupal-8,drupal-contextual-filters,Drupal,Drupal Views,Drupal 8,Drupal Contextual Filters,在链接到搜索api和facets的搜索视图上,我想在我的内容类型上添加上下文过滤器。 此内容类型引用了实体字段,链接到分类术语(一个字段指向目标词汇表中的分类,另一个指向活动词汇表中的分类) 因此,我创建了2个上下文过滤器,每个“分类字段”对应一个 但是,我似乎只应用了第一个过滤器(目标)。如果来自URL的分类术语是目标,则视图将显示正确的结果。但如果它是一个活动,它会显示所有内容。因此,我假设上下文过滤器验证器存在问题:“如果过滤器值未验证,则要采取的操作”应该具有类似“忽略过滤器”的选项

在链接到搜索api和facets的搜索视图上,我想在我的内容类型上添加上下文过滤器。 此内容类型引用了实体字段,链接到分类术语(一个字段指向目标词汇表中的分类,另一个指向活动词汇表中的分类)

因此,我创建了2个上下文过滤器,每个“分类字段”对应一个

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

有人有办法吗


非常感谢

最后,我找到了一个解决方案,只是在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;
    }
}
我在这个钩子中移动了验证逻辑,通过一个简单的词汇测试取消了过滤器


希望它能帮助别人

最后,我找到了一个解决方案,只是在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;
    }
}
我在这个钩子中移动了验证逻辑,通过一个简单的词汇测试取消了过滤器

希望它能帮助别人