分类术语名称作为上下文过滤器以供查看


18

在D7中,我能够根据从URL中获取的分类术语名称来过滤视图。一个例子就是这个URL

http://www.gbyte.co/tags/drupal-planet/rss.xml

“ drupal-planet”将转换为分类术语ID,然后将相应地过滤视图结果。

现在,我使用上下文过滤器“内容:标签(field_tags)”设置了相应的D8视图,其中field_tags为分类字段。但是,只有当我将实际的术语ID传递给URL时,D8视图才会显示结果,如下所示:

http://www.gbyte.co/tags/9/rss.xml

我希望它也可以像D7一样使用术语名称。功能是否缺失,还是我需要以其他方式配置视图?


有什么消息吗?我有同样的问题
jeroen 2015年

Answers:


20

D8视图似乎缺少转换为术语ID过滤器的术语名称

一个网站构建者的解决方法是,在节点上添加一个RelationshipTaxonomy术语,然后使用上述关系将一个Taxonomy Term:名称过滤器添加到上下文过滤器中。选中“ 指定验证标准”复选框,将您的“ 验证器”设置为“ 分类法”术语名称,并选择适当的分类法进行过滤。


12
D8中的Site-builder陷阱添加了上下文过滤器用户界面:上下文过滤器的标题为“名称”,类别为“分类学术语”。搜索“分类法”将无法列出此过滤器,因为仅搜索标题和描述,而不搜索类别。
基思姆

1
此外,您可以覆盖标题{{ arguments.name }}在上下文过滤器的设置。
cptstarling


3

仅出于完成目的,在编写问题时,我已经设法通过将分类术语名称从URL转换为views_hook_pre_view()中的术语ID,然后将其用作上下文过滤器的输入来解决此问题。接受分类ID。

这是views挂钩的代码:

/**
 * Implements hook_views_pre_view().
 */
function my_module_views_pre_view(\Drupal\views\ViewExecutable $view, $display_id, array &$args) {
  if ($view->id() == 'blog' && $display_id == 'feed') {
    if (isset($args[0])) {
      $term = taxonomy_term_load_multiple_by_name($args[0], 'tags');
      if (empty($term)) {
        $term = taxonomy_term_load_multiple_by_name(str_replace("-", " ", $args[0]), 'tags');
      }
      if (!empty($term)) {
        $tid = key($term);
        $args[0] = $tid;
      }
    }
  }
}

2

扩展肖恩·康恩的答案:

  • 在视图配置中,在“高级”->“关系”下,单击“添加”
  • 现在选择“节点上的分类术语”
  • 在下一个屏幕上,选择“标签”词汇并要求建立联系。
  • 现在在“高级”->“上下文过滤器”下,单击“添加”
  • 在“当过滤器不可用时”下,选择“提供默认值”,“来自URL的原始值”。选择其他适合您需要的选项。
  • 在“当有可用的过滤器或提供默认值时”下,选择“指定验证条件”,然后为验证者选择“分类术语名称”。选择“标签”词汇,然后单击“应用”。

希望有帮助!


1

我不知道您是否仍然存在此问题,但是我能够使用所需的分类词汇为“节点上的分类术语”创建关系,然后使用“分类术语:名称”的关系创建上下文过滤器,根据名称而不是TID进行验证。


2
我有这个问题中描述的相同问题,您能否更清楚地了解。我已经设置了一个关系,但是上下文过滤器仅适用于tid而不是术语名称。当然我们在谈论D8。提前致谢。
瓦格纳

1

@kiethm提供了解决此问题的正确方法-在上下文过滤器下,您需要选择“名称”而不是“ Taxonomy Term ID”,然后将验证条件设置为使用“ Taxonomy Term Name”


1

嘿,我一直在寻找答案。对于像我这样寻求实现方式的任何人,我会从这里和drupal.org的结果,再从以下内容中获得成功:http ://redcrackle.com/blog/adding-contextual-filter -view-drupal-8

我正在使用Drupal 8和Zircon。我是新手,所以我可能使用了错误的术语。我想根据某人所在页面的类别在“ Panel first col 1”中创建上下文图像链接。我要做的是转到“结构”>“视图”>“轮播”(在该块区域中具有图片的视图)>“高级”>“按上下文过滤器添加”>“具有分类术语ID”>选择“提供默认值:URL中的分类术语ID”(对我来说毫无意义,但无论如何)>然后我选中了所有三个框:从术语页面加载默认过滤器,从节点页面加载默认过滤器,这对相关的分类法块很有用,按词汇量限制术语。然后对于词汇表,我检查了类别。

EW!最后!感谢你们在这里为我指出正确的方向!我无法解释为什么它总能奏效,但是无论如何,它将继续受雇。



0

您可以通过添加内容来做到这一点在上下文过滤条件中使用分类法术语ID,然后可以通过调整过滤条件在上下文中使用分类法

在此处输入图片说明


您已从D7安装中获取了屏幕截图。在D8中,没有“分类术语”验证器。而是有“分类术语名称”或“分类术语名称”,两者都不接受URL中的分类名称。他们只接受ID。
gbyte.co 2015年

0

我在Drupal-8中通过使用上下文过滤器实现了这一目标:“分类术语:名称”

然后提供默认值类型Url分类法术语ID

然后指定以下验证条件:

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.