繁体   English   中英

颜色、价格和尺码筛选器在 PHP Codeigniter 和 Ajax

[英]Color,Price, and Size Filter In PHP Codeigniter And Ajax

第一节

我在“显示 1-5 条记录中的 10 条记录”中遇到问题。 我有一段代码只适用于第一页,当我点击第二页时,它显示相同的结果“显示 1-5 条记录中的 10 条记录”而不是“显示 10 条记录中的 10 条记录”。

代码在 Controller

 $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 节

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

我的主/索引 Controller

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');
    }

我的 Model

    // 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 循环错误。 我只需要控制空的或 null 部分,就像如果复选框未选中则它不会将值发送/发布到 controller...

我的 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 <-1data.length会做一些检查,但我无法单独检查变量,比如我发送了两个变量在data: color,size我如何单独检查变量,如: if(data.color.length < 0 )

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

答案在这里,所有细节和代码都张贴在提到的链接问题中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM