Php Drupal Add';或';带有hook\u views\u query\u alter()的条件
我创建了自己的模块来监听特定的视图名称和当前的显示。我试图编写一个函数,在下面的WHERE语句中插入OR条件Php Drupal Add';或';带有hook\u views\u query\u alter()的条件,php,drupal,drupal-7,Php,Drupal,Drupal 7,我创建了自己的模块来监听特定的视图名称和当前的显示。我试图编写一个函数,在下面的WHERE语句中插入OR条件 WHERE (( (field_data_field_size_category.field_size_category_value LIKE '%11 - 20 fl oz%' ESCAPE '\\') AND (field_data_field_neck_finish.field_neck_finish_value BETWEEN '21' AND '40') )) 理想的解决方
WHERE (( (field_data_field_size_category.field_size_category_value LIKE '%11 - 20 fl oz%' ESCAPE '\\')
AND (field_data_field_neck_finish.field_neck_finish_value BETWEEN '21' AND '40') ))
理想的解决方案是插入两个或多个语句,如下所示:
WHERE (( (field_data_field_size_category.field_size_category_value LIKE '%11 - 20 fl oz%' ESCAPE '\\')
AND (field_data_field_neck_finish.field_neck_finish_value BETWEEN '21' AND '40' OR
field_data_field_neck_finish_2.field_neck_finish_value_2 BETWEEN '21' AND '40' OR
field_data_field_neck_finish_3.field_neck_finish_value_3 BETWEEN '21' AND '40') ))
/**
* Implements hook_views_query_alter().
*/
function bottle_finder_query_views_query_alter(&$view, &$query) {
if ($view->name == 'product_listing_page' && $view->current_display == 'listing') {
foreach($query->where[1][conditions] as $key=>$val){
if($val['field']=="field_data_field_neck_finish.field_neck_finish_value"){
//dpm($query->where[1][conditions],$name=NULL,$type='status');
$query->add_where_expression(2,"field_data_field_neck_finish_2.field_neck_finish_value2",array('value'=>array('0'=>$val['value'][0],'1'=>$val['value'][1]),'operator'=>'BETWEEN'));
dpm($val['field'],$name=NULL,$type='status');
}
}
dpm($query->where[1][conditions],$name=NULL,$type='status');
drupal_set_message("I can make changes to the view here..");
}
}
或使用以下分组:
WHERE (( (field_data_field_size_category.field_size_category_value LIKE '%11 - 20 fl oz%' ESCAPE '\\')
AND (field_data_field_neck_finish.field_neck_finish_value BETWEEN '21' AND '40') OR
(field_data_field_neck_finish_2.field_neck_finish_value_2 BETWEEN '21' AND '40') OR
(field_data_field_neck_finish_3.field_neck_finish_value_3 BETWEEN '21' AND '40') ))
我试图更改查询的代码如下所示:
WHERE (( (field_data_field_size_category.field_size_category_value LIKE '%11 - 20 fl oz%' ESCAPE '\\')
AND (field_data_field_neck_finish.field_neck_finish_value BETWEEN '21' AND '40' OR
field_data_field_neck_finish_2.field_neck_finish_value_2 BETWEEN '21' AND '40' OR
field_data_field_neck_finish_3.field_neck_finish_value_3 BETWEEN '21' AND '40') ))
/**
* Implements hook_views_query_alter().
*/
function bottle_finder_query_views_query_alter(&$view, &$query) {
if ($view->name == 'product_listing_page' && $view->current_display == 'listing') {
foreach($query->where[1][conditions] as $key=>$val){
if($val['field']=="field_data_field_neck_finish.field_neck_finish_value"){
//dpm($query->where[1][conditions],$name=NULL,$type='status');
$query->add_where_expression(2,"field_data_field_neck_finish_2.field_neck_finish_value2",array('value'=>array('0'=>$val['value'][0],'1'=>$val['value'][1]),'operator'=>'BETWEEN'));
dpm($val['field'],$name=NULL,$type='status');
}
}
dpm($query->where[1][conditions],$name=NULL,$type='status');
drupal_set_message("I can make changes to the view here..");
}
}
提前感谢您的指导。您有这样的想法吗
function bottle_finder_query_views_query_alter(&$view, &$query) {
...
$filter = $query->createFilter('OR');
$filter->condition('some field machine name','some value');
$query->filter($filter);
这只是非常粗略地写出来,让你知道它应该如何工作(祈祷:-)。你的问题是什么?