欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

form_alter views 的 exposed filter form 后 进行修改 sql 查询 自己亲自做的 有大用

//这里 form_alter表单
function shipingzhongcustom_form_alter(&$form, &$form_state, $form_id)
{
if( $arg0=='listkefu' && $form_id=='views_exposed_form'){     
 
      //增加一个空值
       $form['field_yixiangzhuanye_select_value_many_to_one']['#options']['empty']='空';
       $form['field_qq_property_value_many_to_one']['#attributes'] = array('class' => 'laiyuan');
   }
}





//下面是对 views 的查询的 sql语句的更改


function shipingzhongcustom_views_query_alter(&$view, &$query) {   
   if ($view->name == 'allcontentview' && $view->current_display=='page_33') 
   { 
            $query->add_where(1, "node_data_field_is_baoming.field_is_baoming_value IS NULL or node_data_field_is_baoming.field_is_baoming_value  <> '是' ");
            $query->add_where(1, "node_data_field_xueshenname.field_is_zx_shangmen_value = '是' ");
            $query->set_where_group('OR', 1);
            $query->add_where(2, "node_data_field_is_dingjing.field_is_dingjing_value IS NULL or node_data_field_is_dingjing.field_is_dingjing_value  <> '是' ");
            $query->add_where(2, "node_data_field_xueshenname.field_is_zx_shangmen_value = '是' ");
            $query->set_where_group('OR', 2);
    }




可以看看   /node-admin/13469


( 其实sql语句可以在后面 视图那个界面看到 

image.png)


上门未报名的条件相当于 




where (DATE_FORMAT(ADDTIME(node_data_field_shangmeng_time.field_shangmeng_time_value, SEC_TO_TIME(28800)), '%Y-%m-%d') <= '2017-02-20')  
   AND ((node_data_field_is_shangmen.field_is_shangmen_value = '是') AND (node.type in ('kefuchat')))    
 AND ((node_data_field_is_baoming.field_is_baoming_value IS NULL or node_data_field_is_baoming.field_is_baoming_value  <> '是' )
 OR (node_data_field_xueshenname.field_is_zx_shangmen_value = '是' ))   
  AND ((node_data_field_is_dingjing.field_is_dingjing_value IS NULL or node_data_field_is_dingjing.field_is_dingjing_value  <> '是' )
 OR (node_data_field_xueshenname.field_is_zx_shangmen_value = '是' ))



//这里进行对于 表单的中 emtpy 的处理 if ($view->name == 'allcontentview' && $view->current_display=='page_3') { //这里判断是否有值为 empty 如果有的话 就移除它 field_yixiangzhuanye_select_value 再增加一个 其值 为 is null 或 '' //这个empty 是哪里设置的呢 是 本文件约 1615行进行 form_alter 设置的 foreach($query->where[0]['args'as $key=>$value) { if($value=='empty' && stristr($query->where[0]['clauses'][$key],'field_yixiangzhuanye_select_value'))

          { // $export = kprint_r($query, TRUE); // $vars - is a variable which you want to print. // print $export;   
              $query->add_where(0, "node_data_field_yixiangzhuanye_select.field_yixiangzhuanye_select_value IS NULL or node_data_field_yixiangzhuanye_select.field_yixiangzhuanye_select_value='' ");  
               unset($query->where[0]['args'][$key]);  
              unset($query->where[0]['clauses'][$key]);  
           };  




       } 
   }
}





function shipingzhongcustom_views_query_alter(&$view, &$query)
{
  if ($view->name == 'allcontentview' && $view->current_display=='page_33') {

     //$export = kprint_r($query->where, TRUE); // $vars - is a variable which you want to print.
     //print $export;
     //$query->add_where(1, "node_data_field_is_baoming.field_is_baoming_value IS NULL and node_data_field_is_dingjing.field_is_dingjing_value IS NULL ");
     $query->add_where(1, "node_data_field_is_baoming.field_is_baoming_value IS NULL or node_data_field_is_baoming.field_is_baoming_value  <> '是' ");
     $query->add_where(1, "node_data_field_xueshenname.field_is_zx_shangmen_value = '是' ");
     $query->set_where_group('OR', 1);
     $query->add_where(2, "node_data_field_is_dingjing.field_is_dingjing_value IS NULL or node_data_field_is_dingjing.field_is_dingjing_value  <> '是' ");
     $query->add_where(2, "node_data_field_xueshenname.field_is_zx_shangmen_value = '是' ");
     $query->set_where_group('OR', 2);
     //这里是使用 in 方法 来得到 这样的nid(最大的下次跟踪时间为空的id 日期就不高兴限制了 只能加更多的限制的目的就是为了性能)
     //如果不是为了性能的话 直接就是 group by next_time.nid having field_genzong_next_time_value is null 就可以了 就不有必要太多的条件限制了
     $query->add_where(3, "node.nid in
               (select tmp.nid from
                    (select next_time.nid,max(next_time.delta) as maxdelta,next_time.field_genzong_next_time_value
                       from node n
                       inner join content_field_genzong_next_time next_time on n.nid=next_time.nid
                       inner join content_field_is_shangmen shangmen on n.nid=shangmen.nid
                       inner join content_field_is_baoming baoming on n.nid=baoming.nid
                       inner join content_field_is_dingjing dingjing on n.nid=dingjing.nid
                       where n.type='kefuchat'
                       and shangmen.field_is_shangmen_value='是'
                       and (baoming.field_is_baoming_value is null or baoming.field_is_baoming_value  <> '是')
                       and (dingjing.field_is_dingjing_value is null or dingjing.field_is_dingjing_value  <> '是')
                       group by next_time.nid having field_genzong_next_time_value is null
                  ) as tmp
               )" );

//
//    $export = kprint_r($query, TRUE);
//    print $export;
  }

  if ($view->name == 'allcontentview' && $view->current_display=='page_3') {


     //这里判断是否有值为 empty 如果有的话 就移除它 field_yixiangzhuanye_select_value  再增加一个 其值 为 is null 或 ''
     //这个empty 是哪里设置的呢 是 本文件约 1615行进行 form_alter 设置的

     foreach($query->where[0]['args'] as $key=>$value){
        if($value=='empty' && stristr($query->where[0]['clauses'][$key],'field_yixiangzhuanye_select_value')){
//          $export = kprint_r($query, TRUE); // $vars - is a variable which you want to print.
//          print $export;
           unset($query->where[0]['args'][$key]);
           unset($query->where[0]['clauses'][$key]);
           $query->add_where(0, "node_data_field_yixiangzhuanye_select.field_yixiangzhuanye_select_value IS NULL or node_data_field_yixiangzhuanye_select.field_yixiangzhuanye_select_value='' ");

        };

//       $export = kprint_r($view, TRUE); // $vars - is a variable which you want to print.
//          print $export;

//       if($value=='empty' && stristr($query->where[0]['clauses'][$key],'field_yixiangzhuanye_select_value')){
//          unset($query->where[0]['args'][$key]);
//          unset($query->where[0]['clauses'][$key]);
////            //注意这里的字段啊 是 node_data_field_xueshenname_field_yixiangzhuanye_select_value 从 dsm($query)可以看出来这个对象的fields字段
//          $query->add_where(1, "node_data_field_xueshenname_field_yixiangzhuanye_select_value.field_yixiangzhuanye_select_value IS NULL or node_data_field_xueshenname_field_yixiangzhuanye_select_value.field_yixiangzhuanye_select_value='' ");
//          //$query->add_where(1, "node_data_field_yixiangzhuanye_select_value_0.field_yixiangzhuanye_select_value IS NULL or node_data_field_yixiangzhuanye_select_value_0.field_yixiangzhuanye_select_value='' ");
//          $query->set_where_group('AND', 1);
//
////            $query->where[0]['clauses'][$key] = " (node_data_field_yixiangzhuanye_select_value_0.field_yixiangzhuanye_select_value IS NULL) or (node_data_field_yixiangzhuanye_select_value_0.field_yixiangzhuanye_select_value='') ";
//////          $query->where[0]['clauses'][$key] = "node_data_field_yixiangzhuanye_select_value_0.field_yixiangzhuanye_select_value = '%s'";
////            unset($query->where[0]['args'][$key]);
//
//       }
     }
     if(empty($query->where['date']['clauses'][0])){
        global $user;
        $userinfo_str = var_export($user,true);
        $getinfo_str  = var_export($_GET,true);
        $postinfo_str  = var_export($_POST,true);
        $ip_str = ip_address();
        watchdog('content',$userinfo_str.' '.$getinfo_str.' '.$postinfo_str.' '.$ip_str, array(), WATCHDOG_ERROR);

        drupal_set_message('有错误,请联系管理员!');
     }

//    $export = kprint_r($view, TRUE); // $vars - is a variable which you want to print.
//    print $export;
//             $export = kprint_r($query, TRUE); // $vars - is a variable which you want to print.
//       print $export;
     //$query->set_distinct(true);
//    $users_join = $query->table_queue['users']['join'];
//    $users_join->type = 'LEFT';
//       $export = kprint_r($users_join, TRUE); // $vars - is a variable which you want to print.
//       print $export;
//    $query->table_queue['users']['join'] = $users_join;
//    $node_data_field_chat_status_join = $query->table_queue['node_data_field_chat_status']['join'];
//    $node_data_field_chat_status_join->type = 'LEFT';
//    $query->table_queue['node_data_field_chat_status']['join'] = $node_data_field_chat_status_join;
//    $query->add_where(1, "node_data_field_yixiangzhuanye_select_value_0.field_yixiangzhuanye_select_value IS NULL or node_data_field_yixiangzhuanye_select_value_0.field_yixiangzhuanye_select_value='' ");
//    $query->set_where_group('AND', 1);
//    $export = kprint_r($query,TRUE); // $vars - is a variable which you want to print.
//    print $export;


  }

  if ($view->name == 'allcontentview' && $view->current_display=='page_36') {

     //这里判断是否有值为 empty 如果有的话 就移除它 field_yixiangzhuanye_select_value  再增加一个 其值 为 is null 或 ''
     //这个empty 是哪里设置的呢 是 本文件约 1615行进行 form_alter 设置的
     foreach($query->where[0]['args'] as $key=>$value){
        if($value=='empty' && stristr($query->where[0]['clauses'][$key],'field_yixiangzhuanye_select_value')){
//          $export = kprint_r($query, TRUE); // $vars - is a variable which you want to print.
//          print $export;
           unset($query->where[0]['args'][$key]);
           unset($query->where[0]['clauses'][$key]);
           $query->add_where(0, "node_data_field_yixiangzhuanye_select.field_yixiangzhuanye_select_value IS NULL or node_data_field_yixiangzhuanye_select.field_yixiangzhuanye_select_value='' ");

        };
     }

  }
  if ($view->name == 'allcontentview' && ($view->current_display=='page_3' || $view->current_display=='page_35' )) {
     if(!empty($_GET['xgz'])){
        $xgz = $_GET['xgz'];
        unset($query->where['date']);
        unset($query->where[0]);
        $days = $_GET['days'];
        empty($days) && $days = 0;

        if($xgz=='jyyxgz'){
           $row_nids = _xugenzong_ids(array('wz','xq'),$days);
        }else if($xgz=='hdxgz'){
           $row_nids = _xugenzong_ids(array('hd'),$days);
        }else if($xgz=='zgxgz'){
           $row_nids = _xugenzong_ids(array('zgy'),$days);
        }
        $nids = implode(',',$row_nids);
        $query->add_where(0, "node.nid in($nids)");
     }
     if(!empty($_GET['nids'])){

        unset($query->where['date']);
        unset($query->where[0]);
        $nids = $_GET['nids'];
        $query->add_where(0, "node.nid in($nids)");

     }

//    $yxwgz =  $_GET['yxwgz'];
//    if(!empty($yxwgz)){
//       //这是有效未跟踪的 以意向级别不为空来判断的
//       $query->add_where(2, "node_data_field_xueshenname.field_genzong_yxjb_value IS NULL ");
//    }
  }

  if ($view->name == 'kehugengzonglist' && $view->current_display=='page_1') {
     if(!empty($_GET['xgz_kehu'])){
        $xgz_kehu = $_GET['xgz_kehu'];
        unset($query->where['date']);
        unset($query->where[0]);
        if($xgz_kehu=='genzong_kehu_keqing'){
           $row_nids = _genzong_kehu_keqing_nids('genzong_kehu_keqing');
        }else if ($xgz_kehu=='genzong_kehu_weihu'){
           $row_nids = _genzong_kehu_weihu_nids('genzong_kehu_weihu');
        }
        else if ($xgz_kehu=='houtian_shengri'){
           $row_nids = _genzong_kehu_houtian_shengri_nids();
        }
        $nids = implode(',',$row_nids);
        $query->add_where(0, "node.nid in($nids)");
     }
  }
  //当是整骨时
  if ($view->name == 'allcontentview' &&  ($view->current_display=='page_35' || $view->current_display=='page_16')) {
     //以地区咨询人数的大小来排的话 再以地区来排一下
     if(_startWith($query->orderby[0],'node_data_field_xueshenname_field_xueshenzixuandiqu_num_value')){
        $query->add_orderby(NULL, NULL, 'ASC', 'node_data_field_xueshenname_field_xueshenzixuandiqu_value');
     }
  }

  if ($view->name == 'allcontentview' && $view->current_display=='block_1') {
     if(!empty($_GET['xgz'])){
        $xgz = $_GET['xgz'];
        unset($query->where['date']);
        unset($query->where[0]);

        if($xgz=='jyyxgz'){
           $row_nids = _xugenzong_ids(array('wz','xq'));
        }else if($xgz=='hdxgz'){
           $row_nids = _xugenzong_ids(array('hd'));

        }else if($xgz=='zgxgz'){
           $row_nids = _xugenzong_ids(array('zgy'));
        }
        $nids = implode(',',$row_nids);
        $query->add_where(0, "node.nid in($nids)");
     }
     if(!empty($_GET['nids'])){
        unset($query->where['date']);
        unset($query->where[0]);
        $nids = $_GET['nids'];
        $query->add_where(0, "node.nid in($nids)");
     }
//    $yxwgz =  $_GET['yxwgz'];
//    if(!empty($yxwgz)){
//       //这是有效未跟踪的 以意向级别不为空来判断的
//       $query->add_where(2, "node_data_field_xueshenname.field_genzong_yxjb_value IS NULL ");
//    }
  }
}




# 为什么我自己写的sql 要用 '%Y-%m-%%d' (为什么要用两上百分号d)
select c_t_xiaonenzhibantime.nid,    
count(field_xnzbt_start_time_value) as date_cou,    
DATE_FORMAT(ADDTIME(field_xnzbt_start_time_value, SEC_TO_TIME(28800)), '%Y-%m-%%d') as date_one    
from content_type_xiaonenzhibantime c_t_xiaonenzhibantime    
inner join content_field_xnfx_person  c_f_xnfx_person on c_f_xnfx_person.nid=c_t_xiaonenzhibantime.nid  where  
field_xnzbt_start_time_value>='2019-07-01'
 and field_xnzbt_end_time_value<='2019-07-04 00:00:00'  
group by DATE_FORMAT(ADDTIME(field_xnzbt_start_time_value, SEC_TO_TIME(28800)),
'%Y-%m-%%d') order by field_xnzbt_start_time_value asc    



难道是因为 public_html/sites/all/modules/views/includes/handlers.inc 这个里面对mysqli的%d进行了处理?


image.png




普通分类: