2011-12-05 93 views
4

我使用的Drupal 6和圖2 -如何覆蓋drupal查看尋呼機查詢?

我創建使用該文檔

http://www.chadcf.com/blog/creating-custom-filters-drupal-and-views對我的看法自定義過濾器。

每個事情似乎做工精細只有一個問題 -

我的分頁無法正常工作(不與某些運營商出現)

讓我解釋什麼,我想簡要的實現 -

在我的頁面視圖我已經與他們的運營商下拉一些暴露過濾器和我創建一個自定義過濾器暴露無需操作員下拉。

我的要求是與我的自定義過濾器合併一個現有的過濾功能。意味着兩個過濾器將一起工作,以達到預期的結果。但是,一個過濾器是由現有的字段組成的,如果我從下拉列表中選擇它的任何一個操作符,那麼它的值將包含在where子句中,我不想要。所以,我完全使用

hook_views_pre_execute(&$view) { 
     $view->build_info['query'] = preg_replace('/AND \(node_data_field_stock.field_stock_value [<<=>>=!=\\s%d|IS NULL|IS NOT NULL]*\)/','',$view->build_info['query']); 
     } 
我 網站

現在刪除從視圖中查詢的查詢塊/所有/模塊/ mymodule中/ INC/mymodule_filter.inc

function query() { 
     $this->query->add_where($this->options['group'], "MY_QUERY"); 
} 

其中添加where子句來查看查詢。

使用上述方法I,成功地擴展了默認視圖行爲,也越來越希望的結果,但對於一些運營商分頁鏈接沒有出現,甚至我知道有更多的記錄在數據庫中。

我知道爲什麼它的發生 - 因爲我的觀點分頁的腳本不知道我所做的更改。

我的問題是能覆蓋VIEW尋呼機查詢?

任何幫助將不勝感激。

回答

4

我在做什麼,以去除其中從視圖查詢子句如下。

hook_views_pre_execute(&$view) { 
      $view->build_info['query'] = preg_replace('/AND \(node_data_field_stock.field_stock_value [<<=>>=!=\\s%d|IS NULL|IS NOT NULL]*\)/','',$view->build_info['query']); 
    } 

但是,要從視圖查詢中刪除where子句的恰當位置是hook_views_query_alter()。通過使用本教程

http://www.drupaler.co.uk/blog/altering-views-query-tackling-node-type-filter-bug/451

function hook_views_query_alter(&$view, &$query) { 
     if($view->name == 'view_name'){ 
      var_dump($query->where[0]['clauses']); 
       foreach ($query->where[0]['clauses'] as $key=>$value) { 
        if(preg_match('/node_data_field_stock.field_stock_value/',$value)){ 
         unset($query->where[0]['clauses'][$key]); 
         // remove the where clause by it's key 
        } 
       } 

      var_dump($query->where[0]['clauses']); 
     } 
    }