Drupal 8视图配置两个上下文过滤器后,如何仅使用第二个?
如何仅用第二个上下文过滤器(Shape)筛选内容
嘿,我刚好折腾过类似的Drupal视图需求,给你梳理下具体怎么调整就能实现:
1. 先调整Colour上下文过滤器的规则
进入你的视图编辑页,找到Colour对应的那个上下文过滤器,点它的齿轮图标进配置:
- 在**“当过滤器值不存在时”这个板块,选“忽略过滤器(不限制结果)”**——意思就是如果URL里没传Colour的参数,这个过滤器就直接失效,不会给内容加Colour的限制。
- 别忘点保存这个过滤器的设置哦。
2. 再配置Shape上下文过滤器的逻辑
同样找到Shape的上下文过滤器,进配置页面:
- 还是看**“当过滤器值不存在时”**的选项:
- 要是你希望没传Shape参数时,视图就显示所有对象(不限制形状),那就选“忽略过滤器”;
- 要是你想必须传Shape参数才显示内容,就选“显示‘未找到’页面”或者其他你需要的提示行为。
- 另外可以检查下**“允许空值”和“允许多个值”**的开关,确保符合你的实际需求。
3. 优化URL路径(可选,让访问更友好)
现在你的视图路径是/my-view/%/%,如果觉得/my-view//5这种带空参数的URL太奇怪,你可以调整下:
- 把Shape上下文过滤器拖到Colour的前面(在过滤器列表里上下拖动就行);
- 然后把视图路径改成
/my-view/%,这样第一个参数就对应Shape了,访问/my-view/5就能直接显示所有形状为circle(ID5)的对象; - 要是想兼容原来的
/my-view/1/5路径,也可以给视图加一个新的显示方式,专门用/my-view/shape/%这样的路径来处理只传Shape参数的情况。
4. 最后测试验证下
设置完记得测试几种场景:
/my-view/1:还是会显示所有颜色为blue(ID1)的对象(因为Shape过滤器没传值就忽略);/my-view/1/5:依然保留原来的逻辑,显示颜色blue且形状circle的对象;/my-view//5:现在会显示所有形状为circle的对象(Colour过滤器被忽略);- 要是调整了路径顺序,
/my-view/5就直接显示所有Shape=5的内容啦。
内容的提问来源于stack exchange,提问作者Hubert
相关产品推荐
相关产品推荐

