做者: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。若是有什麼專業術語的問題,歡迎糾正錯誤,若是還有一些其餘用法也但願你們能夠一塊兒交流交流。