簡體   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