【问题标题】:Color,Price, and Size Filter In PHP Codeigniter And AjaxPHP Codeigniter 和 Ajax 中的颜色、价格和大小过滤器
【发布时间】:2018-03-19 17:11:35
【问题描述】:

第 1 节

我在“显示 1 - 5 条记录中的 10 条记录”中遇到问题。我有一段代码只在第一页上有效,当我点击第二页时,它会显示相同的结果“显示 10 条记录中的 1-5 条”而不是“显示 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 &lt;-1 等。data.length 会进行一些检查,但我无法单独检查变量,比如我有两个变量发送data: color,size 如何单独检查变量,如: if(data.color.length &lt; 0 ) .

【问题讨论】:

  • 这不是我要找的,请再次阅读问题。

标签: javascript php mysql ajax codeigniter-3


【解决方案1】:

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

【讨论】:

  • 但我不需要 $this-&gt;uri-&gt;segment(3) 我将其分段为 1。
  • 第一段代表控制器,第二段代表方法,其他都是参数
  • 我设置了相应的路由,并将其分段为1,效果很好,请重新阅读问题
【解决方案2】:

答案是Here,所有详细信息和代码都发布在提到的链接问题中。

【讨论】:

猜你喜欢
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 2020-06-03
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 2018-06-05
相关资源
最近更新 更多