跳转到主要内容
米粒之猪 提交于 27 June 2014

昨天,也就是6月26日,我在群里提了这么个问题:

#DCQ:想做一个暴露过滤器的view,不选过滤器时不输出内容,只有选择了过滤器,内容才显示。比如,发布日期作为过滤器,默认的views除了显示日期popup组件,不显示文章,只有选择日期后,才显示某天发布的文章。怎样才能做到这一点?

虽然有群友也提了些建议,但相关方法达不到目的。后来思考了下,觉得只能按两种思路解决。一种是日期选择作为一个单独的表单,提交后显示查询;一种是在views上做文章,靠views的功能组合达到目的。前一种有点复杂,超出我当前的能力,所以还是在views本身做文章吧。

因为views无论怎么设置,其实都要执行查询,既然不能让views在第一次访问时不执行查询,那么是否可以让views在第一次访问时查询结果为0呢?答案是肯定的。

具体到上面的例子,发布日期暴露为过滤器时,默认的views查询条件并不包含日期,所以把满足其他条件的所有记录全部显示出来。为达到没有查询结果的目的,必须增加一个过滤器,这个过滤器必须保证默认情况下所有记录都不满足查询条件,同时在选择日期后,这个过滤器不再起作用。要做到这一点,就要使用逻辑操作:OR!

views的过滤器默认是用“AND”连接的,但我们也可以使用“OR”,并且可以自由组合,这就提供了无限可能性。在我的例子里,由于内容都没有在主页显示,因此可以把content:promoted to frontpage(yes)作为那个永不满足的查询条件,然后把它和日期做“OR”运算。这样就达到了目的。

之所以有这样的需求,其实是因为我在做一个view时,暴露的POPUP日期组件无法设置默认值,造成访问view时不能直接显示当日记录。如果所有记录都显示出来,又会造成混乱,只好采用这个办法来迂回一下。

你还有什么更好的方法,不妨留言分享一下。smiley

Drupal 版本