Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Drupal Add';或';带有hook\u views\u query\u alter()的条件_Php_Drupal_Drupal 7 - Fatal编程技术网

Php Drupal Add';或';带有hook\u views\u query\u alter()的条件

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语句中插入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' 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);    

这只是非常粗略地写出来,让你知道它应该如何工作(祈祷:-)。

你的问题是什么?