做者:yoqu
欢迎转载,但请转载的朋友把个人名字留着,毕竟你们都是幸幸苦苦总结的。
函数api地址:https://api.drupal.org/api/views/views.api.php/function/hook_views_query_alter/7
该函数做用为:在view执行query以前对query进行复写php
近期工做项目须要,会用到根据用户角色来过滤一些内容。而view的设置里面不是很方便,虽然能够用FILTER CRITERIA里面直接添加php来过滤,可是效果不理想,不能达到高度自定义,由此使用到了hook_views_query_alter来自定义条件过滤内容
过滤在我了解的有两种
1.在query里面能够加入一个table进行where查询
2.新的数据表和旧的数据表关联进行where条件查询node
1.使用增长一个table用where过滤数据库
1
2
|
$query
->add_table(
'[表名]'
);
$query
->add_where(0,
'[表字段]'
, [和字段进行比较的值],
'[操做符]'
);
|
说明:
1.表名:对query增长一个数据库中的表
2.表字段:存在query中的全部字段均可以使用
3.和字段进行比较的值:要和表字段进行比较的值,这里根据业务需求来赋值
4.操做符:执行where条件用的操做符,好比like = < > in之类再也不累述。
2.使用关联数据表进行内容过滤api
1
2
3
4
|
$join
=
new
views_join;
$join
->construct(
'[添加关联的数据表]'
,
'[被关联的数据表]'
,
'[被关联的数据表的字段值]'
,
'[添加关联的数据表的字段值]'
);
$query
->add_relationship(
'[添加关联的数据表]'
,
$join
,
'[被关联的数据表]'
);
$query
->add_where(0,
'[表字段]'
, [和字段进行比较的值],
'[操做符]'
);
|
说明: 函数
1.实例化join spa
2.设置它的construct。进行表和表之间的关联,和left join相似 code
(将view中已存在的数据表和新添加的进行关联) ip
3.调用$query的add_relationship方法,将它关联到$query中。 ci
4.和1中的add_where用法一致,再也不说get
以上就是我使用到的hook_views_query_alter。若是有什么专业术语的问题,欢迎纠正错误,若是还有一些其余用法也但愿你们能够一块儿交流交流。