Product search with pagination in Codeigniter


All product listing will not be load on same page but it will be divided into different web page. Hence, we add pagination for product listing.

Follow steps for product search with pagination :


1. Database :

--
-- Database: `searchfilter`
--

-- --------------------------------------------------------

--
-- Table structure for table `product`
--

CREATE TABLE `product` (
  `pid` int(11) NOT NULL,
  `ptitle` varchar(255) NOT NULL,
  `pstatus` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `product` (`pid`, `ptitle`, `pstatus`) VALUES
(1, 'Chumbak', 1),
(2, 'Pink Set of 3 Folk Framed Wall Paintings', 1),
(3, 'Rajasthan Decor Yellow Bedsheet ', 1),
(4, 'Multi-Coloured Printed Cotton Bedsheet', 1),
(5, 'Cotton Double Bedsheet', 1),
(6, 'Navy Blue Printed Fit and Flare Dress', 1),
(7, 'Red Checked Shirt Dress', 1),
(8, 'Blue Denim Printed Fit and Flare Dress', 1),
(9, 'Women Maroon & Beige Printed Straight Kurta', 1),
(10, 'Navy Blue and Beige Printed Straight Kurta', 1),
(11, 'Women White & Turquoise Blue Ikat Print Straight Kurta', 1),
(12, 'Blue Printed Kurta with Trousers & Dupatta', 1),
(13, 'Navy Blue & Maroon Printed Kantha Work Straight Kurta', 1);

--
-- Indexes for table `product`
--
ALTER TABLE `product`
  ADD PRIMARY KEY (`pid`);

--
-- AUTO_INCREMENT for table `product`
--
ALTER TABLE `product`
  MODIFY `pid` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=14;
COMMIT;

2. Add images to template/uploads folder like this :


3. Controller :

<?php
class Pagination extends CI_Controller {
            
    public function __construct()
    {
        parent::__construct();
       
        $this->load->database();
        $this->load->library('pagination');
        $this->load->helper(array('form', 'url'));
        $this->load->library('form_validation');
        $this->load->library("pagination");
        $this->load->model('Pagination_model');
    }

    public function index()
    {
     
        $data['title'] = 'Product Search and pagination';
        $data['description'] = 'Product Search and pagination Using Codeigniter';
        $config['base_url'] = site_url('pagination/index');
        $config['total_rows'] = $this->db->count_all('product');
        $config['per_page'] = "4";
        $config["uri_segment"] = 3;
        $choice = $config["total_rows"]/$config["per_page"];
        $config["num_links"] = floor($choice);

        // integrate bootstrap pagination
        $config['full_tag_open'] = '<ul class="pagination">';
        $config['full_tag_close'] = '</ul>';
        $config['first_link'] = false;
        $config['last_link'] = false;
        $config['first_tag_open'] = '<li>';
        $config['first_tag_close'] = '</li>';
        $config['prev_link'] = '«';
        $config['prev_tag_open'] = '<li class="prev">';
        $config['prev_tag_close'] = '</li>';
        $config['next_link'] = '»';
        $config['next_tag_open'] = '<li>';
        $config['next_tag_close'] = '</li>';
        $config['last_tag_open'] = '<li>';
        $config['last_tag_close'] = '</li>';
        $config['cur_tag_open'] = '<li class="active"><a href="http://localhost/productsearchfilter/pagination/index">';
        $config['cur_tag_close'] = '</a></li>';
        $config['num_tag_open'] = '<li>';
        $config['num_tag_close'] = '</li>';
        $this->pagination->initialize($config);

        $data['page'] = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
       
        // get products list
        $data['productlist'] = $this->Pagination_model->get_products($config["per_page"],                     $data['page'], NULL);
      
        $data['pagination'] = $this->pagination->create_links();
        
        // load view
        $this->load->view('pagination_view',$data);
    }
    
    function search()
    {
         $data['title'] = 'Product Search and pagination';
         $data['description'] = 'Product Search and pagination Using Codeigniter';
        // get search string
        $search = ($this->input->post("ptitle"))? $this->input->post("ptitle") : "NIL";

        $search = ($this->uri->segment(3)) ? $this->uri->segment(3) : $search;

        // pagination settings
        $config = array();
        $config['base_url'] = site_url("pagination/search/$search");
        $config['total_rows'] = $this->Pagination_model->get_products_count($search);
        $config['per_page'] = "4";
        $config["uri_segment"] = 3;
        $choice = $config["total_rows"]/$config["per_page"];
        $config["num_links"] = floor($choice);

        // integrate bootstrap pagination
        $config['full_tag_open'] = '<ul class="pagination">';
        $config['full_tag_close'] = '</ul>';
        $config['first_link'] = false;
        $config['last_link'] = false;
        $config['first_tag_open'] = '<li>';
        $config['first_tag_close'] = '</li>';
        $config['prev_link'] = 'Prev';
        $config['prev_tag_open'] = '<li class="prev">';
        $config['prev_tag_close'] = '</li>';
        $config['next_link'] = 'Next';
        $config['next_tag_open'] = '<li>';
        $config['next_tag_close'] = '</li>';
        $config['last_tag_open'] = '<li>';
        $config['last_tag_close'] = '</li>';
        $config['cur_tag_open'] = '<li class="active">
        <a href="http://localhost/productsearchfilter/pagination/search">';
        $config['cur_tag_close'] = '</a></li>';
        $config['num_tag_open'] = '<li>';
        $config['num_tag_close'] = '</li>';
        $this->pagination->initialize($config);

        $data['page'] = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;
       
        $data['productlist'] = $this->Pagination_model->get_products($config['per_page'],      $data['page'], $search);

        $data['pagination'] = $this->pagination->create_links();

        //load view
        $this->load->view('pagination_view',$data);
    }
}
?>

4. Model :

<?php
class Pagination_model extends CI_Model{
 function __construct()
 {
 parent::__construct();
 }

 function get_products($limit, $start, $st = NULL)
 {
 if ($st == "NIL") $st = "";
 $sql = "select * from product where ptitle like '%$st%' limit " . $start . ", " . $limit;
 $query = $this->db->query($sql);
 return $query->result();
 }

 function get_products_count($st = NULL)
 {
 if ($st == "NIL") $st = "";
 $sql = "select * from product where ptitle like '%$st%'";
 $query = $this->db->query($sql);
 return $query->num_rows();
 }
}
?>


5. View :

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title><?php echo $title; ?></title>
<link rel="stylesheet" href="<?php echo base_url(); ?>template/css/bootstrap.min.css">
<script src="<?php echo base_url(); ?>template/js/jquery.min.js"></script>
<script src="<?php echo base_url(); ?>template/js/bootstrap.min.js"></script>
<style>
.pro-block{
height:250px;
}
.img{
height:225px;
width: 100%;
}
</style>

</head>
<body>
<div class="container">
 <div class="row">
 <div class="col-md-12 well">
 <?php
 $attr = array("class" => "form-horizontal", "role" => "form","id" => "form1", "name" => "form1");
 echo form_open_multipart("pagination/search", $attr);?>
 <div class="row">
 <div class="form-group">
 <div class="col-md-6 col-md-offset-2">
 <input class="form-control" id="ptitle" name="ptitle" placeholder="Search for Product Name..." type="text" value="<?php echo set_value('ptitle'); ?>" />
 </div>
 <div class="col-md-4">
 <input id="btn_search" name="btn_search" type="submit" class="btn btn-danger" value="Search" />
 <a href="<?php echo base_url()."index.php/pagination/index"; ?>" class="btn btn-primary">Show All</a>
 </div>
 </div>
 </div>
 <?php echo form_close(); ?>
 </div>
 </div>
 <div class="row">
<div class="col-md-12 pro-block">
<?php for ($i = 0; $i < count($productlist); ++$i) { ?>
<div class="col-md-3 col-sm-6 col-xs-12">
<div class="post-img">
 <img alt="<?php echo $productlist[$i]->ptitle; ?>" src="<?php echo base_url(); ?>template/uploads/pro_<?php echo $productlist[$i]->pid; ?>_1.png" class="img">
</div>
<h5 class="text-center"><?php echo $productlist[$i]->ptitle; ?></h5>
</div>
<?php } ?>
</div>
</div>
<div class="row">
<div class="col-md-12">
<?php echo $pagination; ?>
</div>
</div>
</div>
</body>
</html>

Comments

Popular posts from this blog

Multi Item Slider in Codeigniter using JQuery

Category Filter in Codeigniter

Profile Form in Codeigniter with Image upload and Validation