PHP Codeigniter和Ajax中的颜色​​,价格和大小过滤器

时间:2018-03-19 17:11:35

标签: javascript php mysql ajax codeigniter-3

第1节

我在“显示10条记录中的1 - 5条”中遇到了问题。我有一段代码只能在第一页上工作,当我点击第二页然后它显示相同的结果“显示1 - 5的10条记录”而不是“显示10条记录中的10条”。

控制器中的代码

 $total=$config["total_rows"];
        $per_page=$config['per_page'];
        $curpage=floor(($this->uri->segment(1)/$config['per_page']) + 1);
        $result_start = ($curpage - 1) * $per_page + 1;
        if ($result_start == 0) $result_start= 1; // *it happens only for the first run*
        $result_end = $result_start+$per_page-1;

        if ($result_end < $per_page)   // happens when records less than per page  
        { $result_end = $per_page; } 
        else if ($result_end > $total)  // happens when result end is greater than total records  
        { $result_end = $total;}
        $data['show']="displaying $result_start to $result_end of $total";

我不知道它有什么问题,我尝试过其他代码,我从不同的网站上找到它们,但它们无法正常工作。

第2节

我有一个过滤器部分,用户可以按尺寸,颜色和价格过滤产品, 如何实现这一部分?

我的主要/索引控制器

public function index($page=1)
    {
         $config = array();
         $keyword    = $this->input->post('search');
        if ($keyword === null){ $keyword = $this->session->userdata('search');}
        else{ $this->session->set_userdata('search',$keyword);}
        $config["base_url"] = base_url();
        $config["total_rows"] = $this->crt->total_items($keyword);
        $config['use_page_numbers'] =true;

        $config['cur_tag_open'] = '<a class="page-numbers current">';
        $config['cur_tag_close'] = '</a>';
        $config["per_page"] =5;
        $config["uri_segment"] = 1;
        $this->pagination->initialize($config);
        $page = ($page - 1) * $config['per_page'];
        // showing x to y of z records
        $total=$config["total_rows"];
        $per_page=$config['per_page'];
        $curpage=floor(($this->uri->segment(1)/$config['per_page']) + 1);
        $result_start = ($curpage - 1) * $per_page + 1;
        if ($result_start == 0) $result_start= 1; // *it happens only for the first run*
        $result_end = $result_start+$per_page-1;

        if ($result_end < $per_page)   // happens when records less than per page  
        { $result_end = $per_page; } 
        else if ($result_end > $total)  // happens when result end is greater than total records  
        { $result_end = $total;}
        $data['show']="displaying $result_start to $result_end of $total";
        $data['sidebar']=$this->crt->sidebar_cat();
        $data['products']=$this->crt->get_product($config["per_page"], $page,$keyword);
        $data["links"] = $this->pagination->create_links();
        $this->load->view('header');
        $this->load->view('index',$data);
        $this->load->view('footer');
    }

我的模特

    // Paginitions for Items

      function total_items($keyword)
    {
        //return $this->db->count_all("product");
        $this->db->like('product_name',$keyword);
        $this->db->from('product');
        return $this->db->count_all_results();
    }


      //Fetching Products

    public function get_product($limit,$start,$keyword){
    //    $this->db->where('Is_Hidden',0);
//        $this->db->select('*');
//        $this->db->from('product');
        $this->db->order_by('product_id', 'DESC');
        $this->db->limit($limit, $start);
        $this->db->like('product_name',$keyword);
        $query = $this->db->get_where('product');
        if(!$query->num_rows()>0)
        {
             echo '<h1>No product available</h1>';
        }
        else
        {
        foreach ($query->result() as $row) {
                $data[] = $row;
            }
            return $data;
        }
    }

我如何获得过滤器部分?

更新1

第1节问题已通过替换这两行来解决

$curpage=floor(($this->uri->segment(1)/$config['per_page']) + 1);
        if ($result_start == 0) $result_start= 1; //

$curpage=$this->uri->segment(1);
        if ($result_start == 0 || $result_start<0) $result_start= 1; // 

更新2

我以某种方式做了过滤器部分,但现在我陷入了ajax问题。问题是当颜色或大小复选框为空时,它会抛出foreach循环的错误。 我只需要控制空或空部分,就像未选中该复选框一样,它不会将值发送/发布到控制器......

我的Ajax代码

function clr(){
           var selected = new Array();
           var size = new Array();
           var url="<?php echo base_url('Cart/filt_color');?>";
          // alert(url);
              $("input:checkbox[name=color]:checked").each(function() {
                  selected.push($(this).val());
                  //console.log(selected);
              });
            // Sizes 
             $("input:checkbox[name=size]:checked").each(function() {
                  size.push($(this).val());
                  //console.log(selected);
              });


              $.ajax({
                  url:url,
                  method:"post",
                  data:{'colors':selected,'sizes':size},
                  success:function(data)
          {
//            
              //console.log(data);
              $("#mdv").html(data);

          }

              });



      }

我尝试了很多检查,例如undefined==''data.length <-1等。data.length会做一些检查,但我无法单独检查变量比如,我发送了两个变量data: color,size 如何单独检查变量,如: if(data.color.length < 0 )

2 个答案:

答案 0 :(得分:0)

初始化分页配置时,尝试使用$config[base_url]中的控制器/方法,并从$this->uri->segment(3)获取页码

答案 1 :(得分:-1)

已回答为Here,所有详细信息和代码都会在上述链接问题中发布。