Drupal 7 开发内部培训资料, 分头诗人

Views里面怎么做复杂的过滤条件

赞成!
0
否决!

现有分类 工程部 和 营运部 工程部下有子项若干个。用views做了一个区块显示内容列表,显示的内容是引用了工程部分类的节点。现在需要修改为根据不同部门的用户来显示不同分类下的内容(在帐号设定里面给用户添加了部门的栏位)。但是好像在views的过滤里面并没有这么复杂的判断,所以问下有什么好点的方案。

3 个回答

赞成!
0
否决!

Better Exposed Filters 有一个这个模块

赞成!
0
否决!

你可以在你的显示内容列表上,单独做一个根据部门分类来显示的一个搜索框,通过该搜索框来完成对部门分类的显示。具体做法:在Views 的过滤标准中,添加一个“ 内容:部门”(前提是该字段已经存在),然后勾上这句话——"把这个过滤条件显示给网站的访问者,允许他们可以更改这个过滤条件",是该字段处于暴露,最后你可以在预览中看见在显示内容列表的上方出现了一个关于部门的搜索框,如需其他条件搜索,步骤如上。

     这只是我的个人看法,不知道能否帮上你的忙。

赞成!
0
否决!

可能我说的不够清晰,区块是首页显示的指定的一个内容类型的标题列表。该内容类型的节点引用了“工程部”或“营运部”分类,现在是想根据当前登录的用户来判断显示那些节点。即:如果用户的部门是工程部就显示引用了分类item工程部的节点,如果用户的部门是营运部就显示营运部分类的节点。

我已经用代码实现了:

具体步骤:

1.创建一个block

2.获取当前用户的部门信息

3.根据用户的部门查询对应的分类TID下的节点显示到block里面

但是这样做有个问题,因为分类在后台是可以编辑/删除的。如果用户删除或编辑了某个分类项就会导致查询语句报错,所以我在后台做了一个配置表单,用system_setting_form()保存分类的tid用来查询(查询用variable_get()获取设置的tid),若果没有设置tid就显示指定的content type。

这样好像有些繁琐,但是试了一下还是挺管用的。但是我想能在views里面能实现就更好了,而且也不用后台在添加配置表单了。