我正在使用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子句以查看查询。
使用上述程序,我成功地扩展了默认视图行为并获得了所需的结果,但是对于某些运算符分页链接没有出现,即使我知道数据库中存在更多记录。
我知道为什么会这样 - 因为我的视图分页脚本不知道我所做的更改。
我的问题是如何覆盖查看PAGER QUERY?
非常感谢任何帮助。
答案 0 :(得分:4)
我正在做什么来从视图查询中删除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']);
}
}