I am new to Codeigniter and seeking some help here.
I am making a test app with pagination. I have selected $config['per_page'] = 1; but instead of showing one listing on first page, it is still showing all of them.
My controller:
public function pagination(){
$keyword = $this->input->post('search[1]');
$main_keyword = $this->search_model->get_city_id_by_input($keyword);
$config['base_url'] = base_url().'search/search-results/';
$config['total_rows'] = $this->search_model->total_number_of_rows($main_keyword);
$config['per_page'] = 1;
$config['use_page_numbers'] = TRUE;
$config['num_links'] = $this->search_model->total_number_of_rows($main_keyword);
$config['cur_tag_open'] = ' ';
$config['next_link'] = 'Next';
$config['prev_link'] = 'Previous';
$this->pagination->initialize($config);
$data['results'] = $this->search_model->get_search_results($main_keyword, $config['per_page'], $this->uri->segment(3));
$this->load->view('view',$data);
}
Model:
function get_city_id_by_input($keyword){
$this->db->select('id');
$this->db->from('vbc_city');
$this->db->where('v_city_name', $keyword);
$query = $this->db->get();
$query_result = $query->result_array();
return $query_result();
}
public function total_number_of_rows($main_keyword) {
$this->db->select('vbc_item_id');
$this->db->from('vbc_vacation_item_attri');
$this->db->where('v_item_city', $main_keyword);
$query = $this->db->get();
return $query->num_rows();
}
public function get_search_results($main_keyword) {
$this->db->select('*');
$this->db->from('vbc_vacation_item_attri');
$this->db->where('v_item_city', $main_keyword);
$query = $this->db->get();
$result = $query->result();
return $result;
}
Please help.
compare your call of the function
$this->search_model->get_search_results($main_keyword, $config['per_page'], $this->uri->segment(3));
and signature of
get_search_results($main_keyword)
of course you will get all results.
I suppose you should convert your function to something like this
public function get_search_results($main_keyword, $perpage, $offset) {
$this->db->select('*');
$this->db->from('vbc_vacation_item_attri');
$this->db->where('v_item_city', $main_keyword);
$this->db->limit($perpage, $offset);
$query = $this->db->get();
$result = $query->result();
return $result;
}
Related
Hi I need hel I'm trying to get pagination with search results.
I don't know what I am doing wrong. Because my results don't show up.
Here is my Model
function search_posts($query, $pagina, $por_pagina)
{
$this->db->select();
$this->db->from('posts');
$this->db->like("post_title", $query, 'both');
$this->db->or_like("post", $query, 'both');
$this->db->order_by('post_id', 'desc');
$this->db->limit($pagina, $por_pagina);
$query = $this->db->get();
return $query->result_array();
}
public function contar_filas()
{
$this->db->select();
$this->db->from('posts');
$query = $this->db->count_all_results();
return $query;
}
Here is my Controller
public function buscar()
{
$this->load->model('M_Articulos');
$data['posts'] = '';
$data['sin_resultados'] = '';
$query = trim($this->input->get('query', TRUE));
if (sizeof($query) == 0)
{
show_404();
}
if ($query)
{
if ($this->uri->segment(3))
{
$pagina = $this->uri_segment(3);
}
else
{
$pagina = 0;
}
$por_pagina = 4;
$data['posts'] = $this->M_Articulos->search_posts($query, $pagina, $por_pagina);
if ($data['posts'] != FALSE)
{
$data['posts'] = $this->M_Articulos->search_posts($query, $pagina, $por_pagina);
$config['base_url'] = base_url() . 'admin/buscar?query=' . $query;
$config['per_page'] = $por_pagina;
$config['total_rows'] = $this->M_Articulos->contar_filas();
$config['uri_segment'] = 3;
$config['enable_query_strings'] = TRUE;
$config['query_string_segment'] = 'page';
$config['page_query_string'] = TRUE;
$this->pagination->initialize($config);
}
else
{
$data['sin_resultados'] = 'nada';
}
}
else
{
$data['sin_resultados'] = 'nada';
}
$this->load->view('admin/layouts/header');
$this->load->view('admin/modules/buscar', $data);
$this->load->view('admin/layouts/footer');
}
does anyone know how to make it work?
I'm going to be more specific. What i want is that when i search somethin in search page there is a pagination. Thanks
I am showing products in a page with a where clause. I am selecting everything from the product table where the category is vegetable, but it's not working. I am new in CodeIgniter. I also checked many questions on the Internet, but nothing is working. If there is anything in this code that is wrong, please tell me.
The controller part:
<?php
class products_list extends CI_Controller
{
function __construct() {
parent::__construct();
$this->load->helper('url'); //to load css base url
$this->load->helper('form');
$this->load->library('form_validation');
$this->load->model("pagination_model");
$this->load->library("pagination");
$this->load->library('table');
}
function vegetables(){
$this ->load->view('includes/header1');
$config['base_url']='http://localhost/mah/index.php/products_list/vegetables';
$vegetable="Vegetable";
$config['total_rows']= $this->db->get_where('product', $vegetable)->num_rows();
$config['per_page'] = 12;
$config['num_links'] = 20;
$config['full_tag_open']='<div id="pagination">';
$config['full_tag_close']='</div>';
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$data["results"] = $this->pagination_model->
fetch_product($config["per_page"], $page);
$data["links"] = $this->pagination->create_links();
$this->load->view("product_display", $data);
$this ->load->view('includes/footer');
}
public function article($id)
{
$this ->load->view('includes/header');
$this->load->model('articles_model', 'product');
$article = $this->product->find($id);
$this->load->view('product_details', compact('article'));
}
}
?>
The model part:
<?php
class pagination_model extends CI_Model
{
public function __construct() {
parent::__construct();
}
public function record_count() {
$where="category='vegetable'";
return $this->db->count_all("product");
}
public function fetch_product($limit, $start) {
$this->db->limit($limit, $start);
$query = $this->db->get("product");
if ($query->num_rows() > 0) {
foreach ($query->result() as $row) {
$data[] = $row;
}
return $data;
}
return false;
}
}
?>
Controller method :
cutomise your links as per your requirements and base_url as well
public function vegetables() {
$data = array('title' => 'Products');
$config = array();
$config['base_url'] = base_url().'products_list/vegetables';
$config['total_rows'] = $this->pagination_model->countRows('products');
$config['per_page'] = 5;
$config['attributes'] = array('class' =>'item');
$config['first_link'] = 'First';
$config['cur_tag_open'] = '<a class="active item">';
$config['cur_tag_close'] = '</a>';
$config['next_link'] = 'Next';
$config['last_link'] = 'Last';
$config['prev_link'] = 'Previous';
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$data["products"] = $this->pagination_model->getProducts('',$config["per_page"],$page);
$data["categoriesData"] = $this->pagination_model->getProducts('vegetable',$config["per_page"],$page);
$data["links"] = $this->pagination->create_links();
print_r($data);die;
//$this->load->view('templates/header',$data);
$this->load->view('product_display',$data);
//$this->load->view('templates/footer');
}
Your model :
getProducts fetch both type of data
1: if u provide category as first param then it return categories data
2: Otherwise fetch whole table;
public function getProducts($category = NULL, $limit = NULL, $start = NULL)
{
$limit = $limit == NULL ? '' : $limit;
$start = $start == NULL ? '' : $start;
$this->db->order_by('id', 'DESC');
$this->db->limit($limit, $start);
if (empty($category))
{
$query = $this->db->get('products');
}
else
{
$query = $this->db->get_where('products', array('category' => $category));
}
if ($query->num_rows() > 0)
{
foreach ($query->result_array() as $row)
{
$data[] = $row;
}
return $data;
}
}
// total count method
public function countRows($table) {
if (empty($table)) return false;
return $this->db->count_all($table);
}
last but not the least :
add this in controller __contruct() method
public function __construct()
{
parent::__construct();
$this->load->helper(array('url','text','html','form'));
$this->load->library(array('session','form_validation','pagination'));
$this->load->database();
$this->load->model('YourModel');
}
try with this...
$config['total_rows']= $this->db->get_where('product', array('title' => $vegetable))
->num_rows();
I am Working pagination in CodeIgniter. I see tutorials and user manual also. but I can't find the way to do it properly they call the database in Controller for pagination. I want a proper solution.
This is The Controller
public function index() {
$this->load->library('pagination');
$config['base_url'] = 'index.php/Emp';
$config['total_rows'] = 200;
$config['per_page'] = 2;
$config['uri_segment'] = 3;
$this->pagination->initialize($config);
$data = array();
$data['showEmployeeTable']=$this->Em->selectEmployeeData(); //FOR SHOWING A EMPLOYEE DATABASE TABLE
if($query = $this->Em->getDesignationData()) //grabs all record
{
$data['records'] = $query;
}
if($query = $this->Em->getCityRecord()) //grabs all record
{
$data['records_city'] = $query;
}
//$this->load->view('emp_update', $data);
$this->load->view('erv', $data);
}
This are My models
public function getDesignationData() {
$query = $this->db->get('emp_desig'); //model created for get data
return $query->result();
}
public function getCityRecord() {
$query = $this->db->get('city'); //model created for get data
return $query->result();
}
// ***************** VEDDING PLAN MODELS **********************************************************
public function selectEmployeeData() {
$query = $this->db->get('emp_manage');
return $query;
}
So how can I show Proper Pagination on the View Page? Kindly answer me step by step. I am a newbie in Codeigniter.
And this in the view.
<?php echo $this->pagination->create_links(); ?>
Your controllers should be
public function index() {
$this->load->library('pagination');
$config = array();
$config['base_url'] = 'index.php/Emp';
$config['total_rows'] = 200;
$config['per_page'] = 2;
$config['uri_segment'] = 3;
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$data['showEmployeeTable']=$this->Em->selectEmployeeData($config["per_page"], $page);
$data["links"] = $this->pagination->create_links();
if($query = $this->Em->getDesignationData()) //grabs all record
{
$data['records'] = $query;
}
if($query = $this->Em->getCityRecord()) //grabs all record
{
$data['records_city'] = $query;
}
$this->load->view('erv', $data);
}
Your model should be
public function selectEmployeeData($limit, $start) {
$this->db->limit($limit, $start);
$query = $this->db->get('emp_manage');
return $query;
}
And in your views add following line
<?php echo $links; ?>
see this code and make some changes as per your requirement:
You controller should be:
function list($offset=0)
{
$num_rows=$this->db->count_all("table_name");
$config['base_url'] = site_url('list');
$config['total_rows'] = $num_rows;
$config['per_page'] = 100;
$config['num_links'] = round($config['total_rows']/$config['per_page']);
//$config['use_page_numbers'] = TRUE;
$config['page_query_string']=TRUE;
$this->pagination->initialize($config);
$data["results"] = $this->Em->selectEmployeeData($config["per_page"], $page);
$this->load->view('viewfile',$data);
}
Your Model :
function selectEmployeeData($limit,$offset)//fetch all data with pagination
{
$data = array();
$this->db->limit($limit, $offset);
$Q = $this->db->get('table');
if($Q->num_rows() > 0)
{
foreach ($Q->result_array() as $row)
{
$data[] = $row;
}
}
$Q->free_result();
return $data;
}
In View :
<?php echo $this->pagination->create_links();?>
In model/rci_model.php
public function record_count() {
return $this->db->count_all("produk");
}
public function fetch_countries($limit, $start) {
$this->db->limit($limit, $start);
$query=$this->db->query("SELECT * FROM produk WHERE id_kategori='Men' order by nama_produk ASC");
return $query->result();
if ($query->num_rows() > 0) {
foreach ($query->result() as $row) {
$data[] = $row;
}
return $data;
}
return false;
}
In controller/sandal_clarudo.php
function sandals_for_men(){
$data['seo'] = $this->rci_model->tampil_meta(22);
$this->load->view('head', $data);
$config = array();
$config["base_url"] = "http://localhost/clarudo/index.php/sandal_clarudo/sandals_for_men/";
$config["total_rows"] = $this->rci_model->record_count();
$config["per_page"] = 5;
$config["uri_segment"] = 3;
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$data["results"] = $this->rci_model->
fetch_countries($config["per_page"], $page);
$data["links"] = $this->pagination->create_links();
$this->load->view('men', $data);
$this->load->view('footer');
}
In view/men.php
<?php
foreach($results as $t){
echo "$t->nama_produk";
}
I want to show product that has category = 'Men' only, but using my code it shows all category products. Ideas?
Try This
in cotroller
$count = $this->rci_model->get_count(); //get number of rows
$config['base_url'] = base_url().'index.php/sandal_clarudo/sandals_for_men/';
$config['total_rows'] = $count;
$config['per_page'] = 5;
$config['uri_segment'] = 3;
$limit = $config['per_page'];
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$data['links'] = $this->pagination->create_links();
$data["results"] = $this->rci_model->fetch_countries($limit, $page);
in model
public function get_count()
{
//count
$query=$this->db->query("SELECT * FROM produk WHERE id_kategori='Men'");
$result = $query->result_array();
$count = count($result);
return $count;
}
//data from table
public function fetch_countries($limit, $page)
{
$query=$this->db->query("SELECT * FROM produk WHERE id_kategori='Men' LIMIT $page, $limit");
$result = $query->result_array();
return $result;
}
in view
//to show data
<?php
foreach ($results as $new_result)
{
echo $new_result['nama_podak'];
}
?>
//to show pagination
<?php
echo $link//Page segment tabs(you can config boostarp for this)
?>
Try this one. You wrong when using limit.
$query=$this->db->query("SELECT * FROM produk WHERE id_kategori='Men' order by nama_produk ASC LIMIT $limit, $start");
$this->db->limit($limit, $start);
$this->db->where('id_kategori', 'men');
$this->db->order_by('nama_produk');
$query = $this->db->get("produk");
Hope this work!
for count use :
public function record_count($limit, $start) {
$this->db->from('count(id_produk) AS count');
$this->db->where('id_kategori', 'men');
$this->db->order_by('nama_produk');
$this->db->limit($limit, $start);
$return = $query->row_array();
return $return['count'];
}
I am having some trouble passing data from 2 queries into my view.
I have a blog system on which people can comment, but i want to show the blog post at the top of my comments page.
To do this I figured I would just pass the results from a query that retrieves the data for the blog entry.
The problem is that I can't acces the array from the view it seems like.
My code so far.
Controller
public function blog($page){
$this->load->library('pagination');
$this->load->model("model_get");
$config['base_url'] = base_url('main/blog/');
$config['total_rows'] = $this->model_get->getBlogcount();
$config['per_page'] = 5;
$this->pagination->initialize($config);
$data["results"] = $this->model_get->getBlog($config['per_page'], $page, "desc");
$this->load->view("content_blog", $data);
}
function comments($page){
$this->load->library('pagination');
$this->load->model("model_get");
$config['base_url'] = base_url('main/comments/'.$this->uri->segment(3).'/');
$config['total_rows'] = $this->model_get->getCommentcount();
$config['per_page'] = 5;
$config['uri_segment'] = 4;
$this->pagination->initialize($config);
$data["blog"] = $this->model_get->getBlog(1,6, 'asc');
$data["results"] = $this->model_get->getComments($config['per_page'], $page);
$this->load->view('content_comment', $data);
}
Model
function getBlog($limit, $start, $sort){
$this->db->order_by("id", $sort);
$results = $this->db->limit($limit, $start)->get('blog');
if ($results1)
{
return $results->result();
}else{
return FALSE;
}
}
function getComments($limit, $start){
$this->db->from('comments');
$this->db->where('blog_id', $this->uri->segment(3));
$this->db->limit($limit, $this->uri->segment(4));
$this->db->order_by("id", "desc");
$results = $this->db->get();
if ($results)
{
return $results->result();
}else{
return FALSE;
}
}
View
foreach($results as $row){
$text = $row->text;
echo "<p>". $text ."</p>";
$name = $this->model_get->getUserById($row->author);
echo "<h4>". $name[0]->login ."</h4>";
}