如何覆盖drupal视图寻呼机查询?

Posted

技术标签:

【中文标题】如何覆盖drupal视图寻呼机查询?【英文标题】:How to override drupal view pager query? 【发布时间】:2011-12-05 09:49:53 【问题描述】:

我正在使用 drupal 6 并查看 2 -

我使用此文档为我的视图创建了一个自定义过滤器

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 子句以查看查询。

使用上述过程,我成功地扩展了默认视图行为并获得了所需的结果,但是对于某些操作员分页链接没有出现,即使我知道数据库中存在更多记录。

我知道为什么会这样 - 因为我的视图分页脚本不知道我所做的更改。

我的问题是如何覆盖 VIEW PAGER QUERY?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

下面是我从视图查询中删除 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']);
     

但要从视图查询中删除 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']);
        
    

【讨论】:

以上是关于如何覆盖drupal视图寻呼机查询?的主要内容,如果未能解决你的问题,请参考以下文章

Drupal视图幻灯片放映将寻呼机项显示为元素

Drupal 寻呼机不适用于查询中的“LIKE”

寻呼机号码与 drupal 7 中的 URI 字符串不匹配?

如何从drupal寻呼机进行ajax调用

Drupal - 在寻呼机中更改上一个/下一个按钮文本

ajax 页面加载视图页面的 ajax 寻呼机由 ajax