用好hook_views_query_alter,高度自定義view的篩選功能

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

相關文章
相關標籤/搜索