Drupal 8 - 忽略上下文过滤器
Drupal 8 - Ignore contextual filter
在链接到搜索 api 和构面的搜索视图中,我想在我的内容类型上添加上下文过滤器。
此内容类型已引用实体字段,链接到分类术语(一个字段到目标词汇表的分类法,另一个到 activity 词汇表的分类法)
因此,我创建了 2 个上下文过滤器,每个过滤器一个 "taxonomy field"。
view
filter
但是,我似乎只应用了第一个过滤器(目标)。如果 URL 中的分类术语是目的地,则视图会显示正确的结果。但如果是 activity,它会显示所有内容。所以我认为上下文过滤器验证器存在问题:'Action to take if filter value does not validate' 应该有类似 'Ignore filter' 的选项,因为使用 'Display all results for the specified field',它显示了所有内容,但不执行下一个过滤器。
有人有解决方案吗?
非常感谢
最后,我找到了解决方案,只需更改 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;
}
}
我在这个挂钩中移动了验证逻辑,通过使用简单的术语词汇测试取消设置过滤器。
希望对大家有所帮助!
在链接到搜索 api 和构面的搜索视图中,我想在我的内容类型上添加上下文过滤器。 此内容类型已引用实体字段,链接到分类术语(一个字段到目标词汇表的分类法,另一个到 activity 词汇表的分类法)
因此,我创建了 2 个上下文过滤器,每个过滤器一个 "taxonomy field"。
view
filter
但是,我似乎只应用了第一个过滤器(目标)。如果 URL 中的分类术语是目的地,则视图会显示正确的结果。但如果是 activity,它会显示所有内容。所以我认为上下文过滤器验证器存在问题:'Action to take if filter value does not validate' 应该有类似 'Ignore filter' 的选项,因为使用 'Display all results for the specified field',它显示了所有内容,但不执行下一个过滤器。
有人有解决方案吗?
非常感谢
最后,我找到了解决方案,只需更改 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;
}
}
我在这个挂钩中移动了验证逻辑,通过使用简单的术语词汇测试取消设置过滤器。
希望对大家有所帮助!