I have a little problem with pagination class of codeigniter
Here is my controller
function index()
{
$this->load->library('pagination');
$config['base_url'] = base_url().'index.php/books/index/';
$config['total_rows'] = $this->db->count_all('books');
$config['per_page'] = '5';
$config['full_tag_open'] = '<p>';
$config['full_tag_close'] = '</p>';
$this->pagination->initialize($config);
echo "Here";
//load the model and get results
$this->load->model('books_model');
$data['results'] = $this->books_model->get_books($config['per_page'],$this->uri->segment(3));
// load the HTML Table Class
$this->load->library('table');
$this->table->set_heading('Title');
// load the view
$this->load->view('books_view', $data);
}
and here is the view
<body>
<h1>Books</h1>
<?php echo $this->table->generate($results); ?>
<?php echo $this->pagination->create_links(); ?>
</body>
and the model
function get_books($num, $offset) {
$query = $this->db->get('books', $num, $offset);
return $query;
}
I setup my database, and routes (default->books) already but the page doesn't show anything. My database table is books.
I don't know if $config is a variable of your own class. If it is the global config, maybe your should set its parameters using $this->config->set_item function.
Furthermore, to avoid troubles like #Henesnarfel mentioned before, try to echo the number of results when you execute the query.
function index()
{
$this->load->library('pagination');
$this->config->set_item('base_url',base_url().'index.php/books/index/');
$this->config->set_item('total_rows',$this->db->count_all('books'));
// ECHO to make me sure that the query is succesfully done
echo("Found ".$this->db->count_all('books')." books");
$this->config->set_item('per_page','5');
$this->config->set_item('full_tag_open','<p>');
$this->config->set_item('full_tag_close','</p>');
$this->pagination->initialize($config);
echo "Here";
//load the model and get results
$this->load->model('books_model');
$data['results'] = $this->books_model->get_books($config['per_page'],$this->uri->segment(3));
// load the HTML Table Class
$this->load->library('table');
$this->table->set_heading('Title');
// load the view
$this->load->view('books_view', $data);
}
Related
My pagination of search results is not working. It's showing result but pagination making it random. Please help me. Search is working but can't apply pagination in it, it's getting complicated
search_products_model
<?php
class search_products_model extends CI_Model {
public function __construct()
{
parent::__construct();
}
public function get_results($search_term,$limit, $offset)
{
// Use the Active Record class for safer queries.
$this->db->like('name',$search_term);
// Execute the query.
$query = $this->db->get('tbl_products',$limit, $offset);
if ( $query->num_rows() > 0 )
{
return $query->result_array();
}
else
{
return FALSE;
}
// Return the results.
}
function get_products_id($id)
{
$this->db->where('prod_id',$id);
$query = $this->db->get('tbl_products');
return $query->result();
}
}
?>
controller
<?php
class search_products extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->helper(array('form','url'));
$this->load->library(array('session', 'form_validation', 'email','pagination'));
$this->load->database();
$this->load->model('search_products_model');
}
function index()
{
$this->search_products();
$this->load->view('search_products_view');
}
function display_registration_form()
{
$this->load->view('search_products_view');
}
function execute_search($offset = 0)
{
$config['base_url'] = '/mehmaa/index.php/search_products/execute_search/';
$config['total_rows'] = $this->db->count_all_results('tbl_products');
$config['per_page'] = 6;
$config['next_link'] = 'Next';
$config['prev_link'] = 'Previous';
$this->pagination->initialize($config);
// Retrieve the posted search term.
$id = $this->input->post('id');
$search_term = $this->input->post('term');
// Use a model to retrieve the results.
$data['results'] = $this->search_products_model->get_results($search_term,$config['per_page'], $offset);
if ( empty($data['results']) )
{
$this->load->view('search_products_view');
$this->session->set_flashdata('message', 'No results found');
}
else{
// Pass the results to`enter code here` the view.
$this->load->view('search_results',$data);
}
}
hi in this link you are not checking the search condition
$config['total_rows'] = $this->db->count_all_results('tbl_products');
change this line to
$config['total_rows'] = $this->db->count_all_results($search_term);
and write the proper query
$config['total_rows'] = $this->db->count_all_results('tbl_products');
Problem in the this files, u need write another query which will be collect result by search without offsets and limits.
For example
function search($text, $offset, $limits){
//this u do search
}
function count_search($text){
//This same logic with search but return Integer value for example
//return $this->db->query()->num_rows();
}
Hi I have implemented Pagination in PHP Code But it is not Working while clicking on the pagination links.It is displaying the same data for all the pages.Here is the code.
Controller:
class Testimonial extends CI_Controller {
function __construct() {
parent::__construct();
//here we will autoload the pagination library
$this->load->library('pagination');
}
public function index()
{
$this->load->model('testimonial_model');
$config = array();
$config["base_url"] = base_url('testimonial/index');
$config['total_rows'] = $this->db->count_all("testimonials");//here we will count all the data from the table
$config['per_page'] = 6;//number of data to be shown on single page
$config["uri_segment"] = 2;
$this->pagination->initialize($config);
$page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0;
$data["records2"] = $this->testimonial_model->get_all_testimonials($config["per_page"], $page);
$data["links"] = $this->pagination->create_links();//create the link for pagination
$data['mainpage'] = "testimonial";
$this->load->view('templates/template',$data);
}
Model:
class Testimonial_model extends CI_Model
{
function get_all_testimonials($limit, $start)
{
$this->db->limit($limit, $start);
$this->db->select('T.*');
$this->db->from('testimonials AS T');
$this->db->where(array('T.status'=>1));
$q = $this->db->get();
if($q->num_rows()>0)
{
return $q->result();
}
else
{
return false;
}
}
}
View:
<div class="pagination"><?php echo $links; ?></div>
Try following will may help you,
public function index()
{
$this->load->model('testimonial_model');
$config = array();
$config["base_url"] = base_url('testimonial/index');
$config['total_rows'] = $this->db->count_all("testimonials");//here we will count all the data from the table
$config['per_page'] = 6;//number of data to be shown on single page
$config["uri_segment"] = 2;
$this->pagination->initialize($config);
$page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0;
$data["records2"] = $this->testimonial_model->get_all_testimonials($config["per_page"], (($page-1)*$config["per_page"]));
$data["links"] = $this->pagination->create_links();//create the link for pagination
$data['mainpage'] = "testimonial";
$this->load->view('templates/template',$data);
}
I cant comment so I just make this an answer,
Here
http://bootsnipp.com/snippets/featured/rounded-pagination
This is what I use in making my pagination! and there is alot more of it! I also use CI as my framework!
I put my problem, I created a table "comments" then I maked a controller which two functions are implemented, function for reading and the one other for insertion.
What I need now is to realize function for managing comments, ie beside each comments there is an options delete and modify.
So,I add a new function that I named manage (), then, to avoid some repetition I think keep read (used to list the comments) and using it into manage() then add these stufs(modify,delete) beside each comment.
But I don't know how to proceed?
I need your advice help!
<?php
class Site extends CI_Controller {
public function __construct()
{
parent::__construct();
// Chargement des ressources pour tout le contrĂ´leur
$this->load->database();
$this->load->helper('url');
$this->load->model('comments_model', 'livreorManager');
}
function index() {
$this->read();
// $this->add();
}
function read() {
$this->load->library('pagination');
$this->load->library('table');
$this->load->library('mytable');
$config['base_url'] = 'http://localhost/ci/index.php/site/index';
$config['total_rows'] = $this->db->get('comments')->num_rows();
$config['per_page'] = 5;
$config['num_links'] = 20;
$tmpl = array ( 'table_open' => '<table class="table table-striped">' );
$this->table->set_template($tmpl);
$config['full_tag_open'] = '<div class="pagination"><ul>';
$config['full_tag_close'] = '</ul></div>';
$this->pagination->initialize($config);
$this->db->order_by("id", "desc");
$data['records'] = $this->db->get('comments',$config['per_page'],$this->uri->segment(3));
$data['donnees'] = $data['records']->result_array();
$this->load->view('site_view', $data);
}
function add() {
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('<p class="form_erreur">', '</p>');
$this->form_validation->set_rules('pseudo', '"Pseudo"', 'trim|required|min_length[3]|max_length[25]|alpha_dash');
$this->form_validation->set_rules('comment', '"Comment"', 'trim|required|min_length[3]|max_length[3000]');
if($this->form_validation->run()) {
$this->livreorManager->add_comment($this->input->post('pseudo'),$this->input->post('comment'));
$this->load->view('success');
$this->read();
}
else {
$this->load->view('add');
}
}
function manage() {
// implément options into read
$this->read();
}
}
I am trying to get the pagination to work with codeigniter. But am getting the following errors
Severity: Notice
Message: Undefined offset: 0
Filename: controllers/group.php
And
Severity: Warning
Message: Invalid argument supplied for foreach()
Filename: views/group_list_view.php
Following is the code of my Model
public function get_list($userid)
{
$this->load->library('pagination');
$config['base_url'] = 'http://localhost/portal/index.php/group/index';
$config['total_rows'] =$this->db->where('UserId',$userid)->get('group')->num_rows();
$config['per_page'] = 10;
$config['num_links'] = 10;
$this->pagination->initialize($config);
$query['groups'] = $this->db->get('group', $config['per_page'], $this->uri->segment(3));
return $query;
}
Here is the code for my controller
class Group extends CI_Controller {
public function __constructor()
{
session_start();
parent::__constructor();
}
public function index()
{
if(!$this->session->userdata('userid'))
redirect('login');
$this->load->model('group_model');
$result = $this->group_model->get_list($this->session->userdata('$userid'));
//neither this works
data['groups'] = $result;
//nor this
$data['groups'] = $result[0];
$this->load->view('group_list_view', $data);
}
}
And this the code in view
foreach($groups as $group){
echo $group->GroupId;
}
Can anyone please guide me where am i doing it worng. Apparently no one else seems to have encountered any such problem. I followed the tutorial from net.tutsplus ditto but still facing the same issue. Please note i am new to PHP to be gentel :)
You need to write the code in controller not in model
public function index()
{
if(!$this->session->userdata('userid'))
redirect('login');
$this->load->library('pagination');
$config['base_url'] = 'http://localhost/portal/index.php/group/index';
$config['total_rows'] = // Use the same function to get the number of rows
$config['per_page'] = 10;
$config['num_links'] = 10;
$this->pagination->initialize($config);
$this->load->model('group_model');
$result = $this->group_model->get_list($this->session->userdata('$userid'));
data['groups'] = $result;
$this->load->view('group_list_view', $data);
}
Here:
$query['groups'] = $this->db->get('group', $config['per_page'], $this->uri->segment(3));
You're assing the query resultset to $query['group']
but in the controller you're doing
$data['groups'] = $result;
and then you iterate:
foreach($groups as $group){
You should be doing instead:
foreach($groups['groups'] as $group){
Since your original assignment in the model is to $query['groups'].
So, either you assing to $query in the model, or you iterate the correct array in the view (like I showed you above)
codeigniter errors :I am trying to run my project and Select data from the datatbase but I get this error:
A PHP Error was encountered
Severity: Warning
Message: Invalid argument supplied for foreach()
Filename: controllers/NewsController.php
Line Number: 43
Controller:
class NewsController extends CI_Controller{
// num of records per page
private $limit = 10;
function News(){
parent::Controller();
// load library
$this->load->library(array('table','validation'));
// load helper
$this->load->helper('url');
// load model
$this->load->model('NewsModel','',TRUE);
}
function index($offset = 0){
$this->load->model('NewsModel','',TRUE);
// offset
$uri_segment = 3;
$offset = $this->uri->segment($uri_segment);
// load data
$News1 = $this->NewsModel->get_paged_list($this->limit, $offset)->result();
// generate pagination
$this->load->library('pagination');
$config['base_url'] = ('News/index/');
$config['total_rows'] = $this->NewsModel->count_all();
$config['per_page'] = $this->limit;
$config['uri_segment'] = $uri_segment;
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
// generate table data
$this->load->library('table');
$this->table->set_empty(" ");
$this->table->set_heading('id', 'title', 'image', 'discreption', 'Actions');
$i = 0 + $offset;
$newss=$this->load->model('NewsModel');
foreach($newss as $news){
$this->table->add_row(++$i, $news->title, $news->image,$news->discreption);
anchor('News/view/'.$news->id,'view',array('class'=>'view')).' '.
anchor('News/update/'.$news->id,'update',array('class'=>'update')).' '.
anchor('News/delete/'.$news->id,'delete',array('class'=>'delete','onclick'=>"return confirm('Are you sure want to delete this person?')") );
}
$data['table'] = $this->table->generate();
// load view
$this->load->view('NewsList', $data);
}
Model:
class NewsModel extends CI_Model{
// table name
private $tbl_News= 'news';
function News(){
parent::Model();
}
// get number of News in database
function count_all(){
return $this->db->count_all($this->tbl_News);
}
// get with paging
function get_paged_list($limit = 10, $offset = 0){
$this->db->order_by('id','asc');
return $this->db->get($this->tbl_News, $limit, $offset);
}
// get News by id
function get_by_id($id){
$this->db->where('id', $id);
return $this->db->get($this->tbl_News);
}
// add news
function save($news){
$this->db->insert($this->tbl_News, $news);
return $this->db->insert_id();
}
// update News by id
function update($id, $news){
$this->db->where('id', $id);
$this->db->update($this->tbl_News, $news);
}
// delete News by id
function delete($id){
$this->db->where('id', $id);
$this->db->delete($this->tbl_News);
}
}
here, you are wrong
$newss=$this->load->model('NewsModel');
do it like this
$this->load->model('NewsModel'); //this line just loads model
$newss=$this->NewsModel->your_function_in_model(); //here you call function from models that you ve loaded
Check this line:
$newss = $this->load->model('NewsModel');
You need to call a model function here and not load the model again. I think it should be:
$newss = $this->NewsModel->get_paged_list();
Or, change the foreach to:
foreach($News1 as $news){ #$News1 from $News1 = $this->NewsModel->get_paged_list($this->limit, $offset)->result();
I think you don't know how load->model() works.
$this->load->model('NewsModel'); // will load NewsModel on NewsController
// you can call loaded model by $this->modelName
$newss = $this->NewsModel->get_paged_list(10, $i); // will call get_paged_list() on NewsModel and result will save on newss
There is no such function call in your code. Now you can do this foreach($newss as $news)