php – 如何覆盖drupal view pager查询?
我正在使用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']); } 现在在我的 function query() { $this->query->add_where($this->options['group'],"MY_QUERY"); } 添加where子句来查看查询. 使用上面的过程我成功地扩展了默认的视图行为,并获得了所需的结果,但是对于某些运算符分页链接没有出现,即使我知道数据库中存在更多的记录. 我知道为什么会这样 – 因为我的视图分页脚本不知道我所做的改变. 我的问题是如何覆盖查看PAGER QUERY? 任何帮助将不胜感激. 解决方法
我正在做什么来从视图查询中删除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']); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |