【发布时间】:2016-01-27 10:32:35
【问题描述】:
我对 D8 很陌生,我正在尝试做以下事情:
我有一个内容类型:电影。 在该内容类型中,我有一个自定义字段 api_id ,它只是一个整数。
当我在电影页面上时,我想在内容下显示一个带有相同 api_id 电影的块。
我设法为同一作者的同一部电影创建了块,但我不知道如何过滤 api_id(我玩过很多上下文过滤器......)
有什么想法吗?谢谢
【问题讨论】:
标签: drupal-views drupal-8
我对 D8 很陌生,我正在尝试做以下事情:
我有一个内容类型:电影。 在该内容类型中,我有一个自定义字段 api_id ,它只是一个整数。
当我在电影页面上时,我想在内容下显示一个带有相同 api_id 电影的块。
我设法为同一作者的同一部电影创建了块,但我不知道如何过滤 api_id(我玩过很多上下文过滤器......)
有什么想法吗?谢谢
【问题讨论】:
标签: drupal-views drupal-8
好的,我设法用 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' => '=',
);
}
}
}
}
}
}
为此,您必须首先在要覆盖过滤器的字段上创建一个带有简单过滤器的视图。
【讨论】: