codeigniter pagination not work for particular user articles - php

My Pagination not work , In this case simple print users article to match the rc code of users its work perfectly url is ../project/article/user_article/?rc=4715422 , its work but pagintion url not print any article, pagination url is ../project/article/user_article/?rc=4715422/1,
here is my code: controller code is -
public function user_article()
{
$rc=$_GET['rc'];
$data['title'] = "User Article";
$config = array();
$config["base_url"] = base_url() . 'article/user_article/?rc='. $rc ;
$config["total_rows"] = $this->article_m->record_count_uarticles($_GET);
$config["per_page"] = 1;
$config["uri_segment"] = 3;
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$data["results"] = $this->article_m->fetch_result_uarticles($_GET, $config["per_page"], $page);
$data["links"] = $this->pagination->create_links();
if ($this->session->userdata ('is_logged_in')){
$data['profile']=$this->model_users->profilefetch();
$this->load->view('header',$data);
$this->load->view('user_article', $data);
$this->load->view('sfooter', $data);
} else {
redirect('signin');
}
}
and my modal is :
public function record_count_uarticles($rc) {
$query=$this->db->select('email,writer')->where('rc',$rc['rc'])->get('users');
$result=$query->result_array();
if ($query->num_rows() > 0) {
$row = $query->row_array();
$array = array ('email' => $row['email'], 'status' => '1');
return $this->db->where($array)->count_all_results("articles");
}
}
public function fetch_result_uarticles($rc, $limit, $start) {
$query=$this->db->select('email,writer')->where('rc',$rc['rc'])->get('users');
$result=$query->result_array();
if ($query->num_rows() > 0) {
$row = $query->row_array();
$this->db->limit($limit, $start);
$array = array ('u.email' => $row['email'], 'a.status' => '1', 'u.writer' => '1');
$query1=$this->db->select('a.id,title,a.status,description,image,a.email,tags,postdate,firstname,lastname,rc')->join('users u','u.email = a.email','left')->where($array)->order_by('a.id', 'DESC')->get('articles a');
if ($query1->num_rows() > 0) {
foreach ($query1->result() as $row) {
$data[] = $row;
}
return $data;
}
return false;
}
}
Check this code, pagination show properly, first page article print correctly but after click on pagination link then no article print in scnd page
This Link work but default link is not work , is there any query to change the url
../project/article/user_article/?rc=4715422/1 -- Default Link Not Work
../project/article/user_article/1/?rc=4715422 -- Custom Edited Link work

Related

Codeigniter pagination is not working

I am using codeigniter pagination. But I'm facing a problem while using codeingiter pagination. Here is the issue which I am facing.
Ex: If there are more than 10 records for a page and here I am displaying 5 records per page. If I click on the second page it is displaying the data correctly but if I need to go back for the first page it is not working. Here is my code:
Controller:
class Testimonial extends CI_Controller {
function __construct() {
parent::__construct();
//here we will autoload the pagination library
$this->load->model('testimonial_model');
$this->load->library('pagination');
}
public function index()
{
$config = array();
$config["base_url"] = base_url('testimonial/index');
$config['total_rows'] = $this->testimonial_model->record_count();//here we will count all the data from the table
$config['per_page'] = 2;//number of data to be shown on single page
$config["uri_segment"] = 2;
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 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;
}
}
function record_count()
{
return $this->db->count_all("testimonials");
}
}
use this answer please read the code once to understand it
public function index()
{
$config = array();
//$config["base_url"] = base_url('testimonial/index');
$get_vars = $this->input->get();
if(is_array($get_vars))
$config['suffix'] = '?'.http_build_query($get_vars,'', "&");
//$config['prefix'] = '?'.http_build_query($get_vars,'', "&");
$config['base_url'] = base_url().$this->router->class.'/index';
$config['first_url'] = $config['base_url'] . (isset($config['suffix'])?$config['suffix']:'');
$config['total_rows'] = $this->testimonial_model->record_count();//here we will count all the data from the table
$config['per_page'] = 2;//number of data to be shown on single page
//this line should be according to url to fetch actual value
$config["uri_segment"] = ($this->uri->segment('2')?$this->uri->segment('2'):0); // 2 or 3 based on ur url
$this->pagination->initialize($config);
$page = $config["uri_segment"];
$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);
}

Pagination links in codeigniter 2 went to empty result

I tried to create pagination in search result. I got whole search result and correct number of pagination links, but when tried to go to next page search result went blank. 1st page should be fine. But it dosen't shows any error.
Here is the code:
Controller function
public function staffsearch() {
if ($this->session->userdata('logged_in') == FALSE) {
$this->index();
} else {
$data['action'] = site_url('user/staffsearch/');
$search_by = $this->input->post('search_by');
$keyword = $this->input->post('keyword');
if (!empty($search_by) && !empty($keyword)) {
$uri_segment = 3;
$offset = $this->uri->segment($uri_segment);
$staff_details = $this->User_Model->get_staff_search_result($search_by, $keyword, $this->limit, $offset)->result();
$query = $this->db->query("SELECT * FROM `staff` WHERE `" . $search_by . "` LIKE '%" . $keyword . "%'");
$count = $query->num_rows();
$this->load->library('pagination');
$config['base_url'] = site_url('user/staffsearch/');
$config['total_rows'] = $count;
$config['per_page'] = $this->limit;
$config['uri_segment'] = $uri_segment;
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
//$staff_details = $this->User_Model->get_staff_search_result($search_by, $keyword)->result();
$this->load->library('table');
$this->table->set_empty(' ');
$this->table->set_heading('S/No', 'Image', 'Name', 'Office', 'Phone');
$i = 0;
foreach ($staff_details as $staff) {
if ($staff->Office) {
$id = $staff->Office;
$staff_office = $this->User_Model->get_office_by_id($id)->row();
$office = $staff_office->building . ' ' . $staff_office->level . '-' . $staff_office->unit;
} else {
$office = '';
}
if ($staff->Photo_small == '') {
$pic = 'unavailable.jpg';
} else {
$pic = $staff->Photo_small;
}
$this->table->add_row(++$i, '<image src="' . base_url() . 'people/' . $pic . '" width="50" height="50">', anchor('user/staffdetails/' . $staff->people_id, $staff->Name), $office, $staff->Phone);
}
$data['title'] = 'Search Result';
$data['table'] = $this->table->generate();
}
$this->load->view('search_staff', $data);
}
}
Model function:
function get_staff_search_result($fiels, $key,$limit = 10, $offset = 0) {
if ($fiels == 'Name') {
$this->db->like('Name', $key);
} elseif ($fiels == 'Staffnumber') {
$this->db->like('Name', $key);
} else {
$this->db->like('Appointment', $key);
}
$this->db->order_by('Name', 'asc');
return $this->db->get($this->tbl_staff,$limit, $offset);
}
View:
<div>
<h2><?php if (isset($title)) { echo $title;} ?></h2>
<?php if (isset($table)) { echo $table; } ?>
<?php if (isset($pagination)) { echo $pagination;} ?>
</div>
The links created by the pagination class won't contain the 'search_by' and 'keyword' criteria and they certainly won't be in the post variables as when you click a page link you are doing an HTTP GET.
You need to think about either storing the criteria in somewhere like the user's session so that it can be reused for each page request or look to use the Pagination library from CodeIgniter 3 which supports adding items (such as your two search terms) as query string parameters which you could then also check for.
Details about the CodeIgniter 3 Pagination class can be found here.
Not tried this myself but you should also be able to amend the URL for the pagination links so they read:
site_url('user/staffsearch/') . $search_by .'/' . $keyword;
You could then read the individual URL segments to retrieve the search terms.

How to add pagination to following

How to apply pagination successfully to the following code
code1: main controller, under which i have a function login_process checks if user who is logging is valid or not by true status and if he is valid then it is checked whether column 'status' in database is 1 or 0 , if it is 1 then he is admin and he will be login .
public function login_process()
{
$this->load->model('insert_model');
$data['users'] = array(
'fname' => $this->input->post('fname'),
'pass'=> $this->input->post('pass'),
);
$status= $this->insert_model->login_test($data);
$st['ss']=$this->insert_model->stat($data);
//print "<pre>"; print_r($status); die();
if($status == true )
{
if( $st['ss'] [0] ['status'] == 0)
{
$ses = array(
'username' => $this->input->post('fname'),
'password' => $this->input->post('pass'),
);
$this->session->set_userdata($ses);
$im['pic']=$this->insert_model->image_fetc();
$this->load->view('header_view',$im);
$this->load->view('navside_view');
$this->load->view('user_view');
}
else
{
$ses = array(
'username' => $this->input->post('fname'),
'password' => $this->input->post('pass'),
);
$this->session->set_userdata($ses);
$im['pic']=$this->insert_model->image_fetc();
// print_r($aaa); die();
// $data['aa'] = "sd";
//$data['books'] = $this->abc();
$data['books'] = $this->insert_model->pagination();
//print "<pre>";print_r($data);die();
$this->load->view('header_view',$im);
$this->load->view('navside_view');
$this->load->view('admin_view', $data);
}
}
else
{
$this->load->view('header_view');
$this->load->view('navside_view');
$this->load->view('center_view_login');
}
}
code 2: now next code is of my controller insert_controller code in which various functions are used firstly to check wheter user is valid or not and secondly to check status column from database and also pagination code and image fetch code.
public function login_test($users)
{
foreach($users as $user)
{
$uname = $user['fname'];
$pass = $user['pass'];
}
$query = $this->db->where('fname',$uname)
->where('pass',$pass)
->get('register');
if($query->num_rows == 1)
{
return $query->result_array();
}
else
{
return false;
}
}
public function stat($users)
{
foreach($users as $user)
{
$uname = $user['fname'];
$pass = $user['pass'];
}
$s= $this->db->select('status')->where('fname',$uname)->where('pass',$pass)->get('register');
if($s->num_rows == 1)
{
return $s->result_array();
}
else
{
return false;
}
}
public function image_fetc()
{
$us=$this->session->userdata('username');
$pass=$this->session->userdata('password');
$images= $this->db->select('image')->where('fname',$us)->where('pass',$pass)->get('register');
return $images->result_array();
}
public function pagination(){
//$this->load->model('insert_model');
//$data ['query'] = $this->insert_model->view_data();
$this->load->library('table');
// Load Pagination
$this->load->library('pagination');
$total_row = $this->db->count_all("register");
// Config setup
$config['base_url'] = base_url().'index.php/welcome/login_process';
$config['total_rows'] = $total_row;
$kk=$config['use_page_numbers'] = TRUE;
$config['per_page'] = 2;
// I added this extra one to control the number of links to show up at each page.
$rpp = $config['num_links'] = 5;
// Initialize
$this->pagination->initialize($config);
// Query the database and get results
// Here we add the limit and the offset
// The second parameter is the limit, since we are showing
// 10 per page, the limit should be 10
if($this->uri->segment(3)){
$page = ($this->uri->segment(3)) ;
}
else{
$page = 1;
}
$offset = ($rpp*$page)-$rpp;
$qry = $this->db->get('register',15, $offset);
// Create custom headers
$header = array('id','username','lastname','email' , 'password', 'image','status');
// Set the headings
$this->table->set_heading($header);
// Load the view and send the results
// print_r($offset);die();
/* if($offset == 0)
{
return $data['books'];
}
else
{
//$data['books'] = $this->abc();
$im['pic']=$this->insert_model->image_fetc();
$this->load->view('header_view',$im);
$this->load->view('navside_view');
$this->load->view('admin_view', $data);
}
// print_r($data); die();
}*/return $qry->result_array();
}}
code3: last code is the code of my admin_view in which i want to do paging successfully but it is not going properly so plz help me how to do my pagination properly with this whole code
<?php echo $this->table->generate($books); ?>
<?php echo $this->pagination->create_links(); ?>
plz help me where i am wrong and plz do the correctness

CodeIgniter Search Results Pagination

Well I've searched and searched all around but I still can't find a solution to my problem. I'm still new to php and codeigniter so maybe I missed the answer already but anyways, here's what I'm trying to do.
This is my Controller (c_index.php) - calls a search function and performs pagination on the resulting array.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class C_index extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('m_search');
$this->load->library("pagination");
$this->load->library("table");
}
/** Index Page for this controller */
public function index()
{
if($this->session->userdata('logged_in')){
$this->load->view('v_user');
}
else{
$this->load->view('index');
}
}
public function search()
{
// start of search
$search_term = $this->input->post('word');
$books = $this->m_search->search_books($search_term);
// start of pagination
$config['base_url'] = "http://localhost/test/index.php/c_index/search";
$config['per_page'] = 5;
$config['num_links'] = 7;
$config['total_rows'] = count($books);
echo $config['total_rows'];
$this->pagination->initialize($config);
$data['query'] = array_slice($books,$this->uri->segment(3),$config['per_page']);
$this->load->view("index",$data);
}
}
Here's my view (index.php) - basically just displays the pagination result
<h3> Search Results </h3>
<!-- table -->
<table class="table table-condensed table-hover table-striped" id="result_table">
<tbody>
<?php
if(isset ($query)){
if(count($query)!=0){
foreach($query as $item){
echo "<tr><td>". $item['title'] ." by " .$item['author'] ."<br/></td></tr>";
}
echo $this->pagination->create_links();
}
else
{
echo "No results found for keyword ' ". $this->input->post('word')." ' .";
}
}
else
{
echo "Start a search by typing on the Search Bar";
}
?>
</tbody>
</table>
My model (m_search.php) - basically searches the database and returns an array of results.
<?php
class M_search extends CI_Model{
function search_books($search_term='default')
{
$filter = $this->input->post('filter');
//echo $filter;
if($filter == 'title')
{
//echo 'title';
$this->db->select('*');
$this->db->from('book');
$this->db->like('title',$search_term);
// Execute the query.
$query = $this->db->get();
return $query->result_array();
}else if($filter == 'author')
{
//echo 'author';
$this->db->select('*');
$this->db->from('book');
$this->db->like('author',$search_term);
// Execute the query.
$query = $this->db->get();
return $query->result_array();
}else if($filter == 'type')
{
//echo 'type';
$this->db->select('*');
$this->db->from('book');
$this->db->like('book_type',$search_term);
// Execute the query.
$query = $this->db->get();
return $query->result_array();
}else if($filter == 'status')
{
//echo 'status';
$this->db->select('*');
$this->db->from('book');
$this->db->like('book_status',$search_term);
// Execute the query.
$query = $this->db->get();
return $query->result_array();
}else
{
//echo 'all';
$this->db->select('*');
$this->db->from('book');
$this->db->like('book_status',$search_term);
$this->db->or_like('book_type',$search_term);
$this->db->or_like('author',$search_term);
$this->db->or_like('title',$search_term);
// Execute the query.
$query = $this->db->get();
return $query->result_array();
}
}
}
Now my problem is keeping the results for the pagination.
The first page is fine but whenever I click on a page link, the results on the table show the whole database and is not limited to my search results.
I've read somewhere that I need to use sessions to keep my search_term so that it works when I switch pages but I don't know where to put it.
Any advice or suggestions would be greatly appreciated. Thanks.
There are several of different ways to handle search and pagination depending on your needs. Based on your existing code, this is what I would do.
Change
$search_term = $this->input->post('word');
to
$search_term = ''; // default when no term in session or POST
if ($this->input->post('word'))
{
// use the term from POST and set it to session
$search_term = $this->input->post('word');
$this->session->set_userdata('search_term', $search_term);
}
elseif ($this->session->userdata('search_term'))
{
// if term is not in POST use existing term from session
$search_term = $this->session->userdata('search_term');
}
function search_books($search_term='default')
{
$filter = $this->input->post('filter');
//echo $filter;
if($filter == 'title')
{
$this->db->like('title',$search_term);
}
else if($filter == 'author')
{
$this->db->like('author',$search_term);
}
else if($filter == 'type')
{
$this->db->like('book_type',$search_term);
}
else if($filter == 'status')
{
$this->db->like('book_status',$search_term);
}
else
{
$this->db->like('book_status',$search_term);
$this->db->or_like('book_type',$search_term);
$this->db->or_like('author',$search_term);
$this->db->or_like('title',$search_term);
// Execute the query.
}
$query = $this->db->get('book');
return $query->result_array();
}
}
Just trying to lessen your Model code, if you don't want to use "session" and want to copy, paste link/url and get same result in your search then you should use uri class in your controller.
you can use following code in your controller all query string will show in pagination links.
$config['reuse_query_string']=TRUE;
for additional parameters in paging link you can un comment following 2 lines.
//$getData = array('s'=>$search);
//$config['suffix'] = '?'.http_build_query($getData,'',"&");
$this->pagination->initialize($config);
Try in this way in your Controller,
public function search()
{
$result=array();
if($this->session->userdata('login_id')!='')
{
$q = trim($this->input->get('q'));
if(strlen($q)>0)
{
$config['enable_query_strings']=TRUE;
$getData = array('q'=>$q);
$config['base_url'] = base_url().'admin/Product/search/';
$config['suffix'] = '?'.http_build_query($getData,'',"&");
$config['first_url'] = $config['base_url'].'?q='.$q;
$config["per_page"] = 10;
$config['use_page_numbers'] = TRUE;
$total_row = $this->Prod_model->search_record_count($q);
$config['total_rows']=$total_row;
$config['num_links'] = $total_row;
$config['cur_tag_open'] = ' <a class="current">';
$config['cur_tag_close'] = '</a>';
$config['next_link'] = 'Next >';
$config['prev_link'] = '< Previous';
if($this->uri->segment(3))
{
$page = $this->uri->segment(3);
}
else
{
$page = 1;
}
$result['search'] = $this->Prod_model->search($q,$config["per_page"],$page);
if(empty($result['search']))
{
echo "no data found";die;
}
else
{
$this->pagination->initialize($config);
$str_links = $this->pagination->create_links();
$result["links"] = explode(' ',$str_links);
$id=$this->session->userdata('login_id');
$result['user']=$this->Home_model->user_details($id);
$this->template->load('prod_table',$result);
}
}
else
{
echo "empty string";die;
}
}
else
{
redirect(base_url()."admin/");
}
}

CI - drilling to a single post/thread

Could someone please enlighten me as to what I'm doing incorrectly - I'm currently following a net tuts+ video, which goes through the process of listing an array of posts, and then having the ability to click on one post, to be shown the detail.
I'm adapting the above method for my own solution/web application, but I'm at a loss as to why my array is blank.
I'm using this line to create link/anchor to the next controller
<a href="<?php echo base_url(); ?>Search/site/<?php echo $site->siteID; ?>"><?php echo $site->site_title; ?>
I've highlighted the code where I believe I'm going a miss,
Thanks
Controller
class Search extends CI_Controller {
public function display($sort_by = 'site_title', $sort_order = 'asc', $offset = 0)
{
$limit = 20;
$data['columns'] = array(
'site_title' => 'Site Name',
'site_uprn' => 'Unique Property Reference'
);
$this->load->model('search_model');
$results = $this->search_model->search_sites($limit, $offset, $sort_by, $sort_order);
$data['sites'] = $results['rows'];
$data['num_results'] = $results['num_rows'];
//pagination
$this->load->library('pagination');
$config = array ();
$config['base_url'] = site_url("Search/display/$sort_by/$sort_order");
$config['total_rows'] = $data['num_results'];
$config['per_page'] = $limit;
$config['uri_segment'] = 5;
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
$data['sort_by'] = $sort_by;
$data['sort_order'] = $sort_order;
$this->load->view('search', $data);
}
**function site($siteID){
$this->load->model('search_model');
$data['site_detail']=$this->search_model->site_detail($siteID);
//$this->load->view('site', $data);
}
}**
Model
<?php
class Search_model extends CI_Model {
function search_sites($limit, $offset, $sort_by, $sort_order){
$sort_order = ($sort_order == 'desc') ? 'desc' : 'asc';
$sort_columns = array('site_title', 'site_uprn');
$sort_by = (in_array($sort_by, $sort_columns)) ? $sort_by : 'site_title';
//site table
$q = $this->db->select('siteID, site_title, site_uprn')
->from('sites')
->limit($limit, $offset)
->order_by($sort_by, $sort_order);
$ret['rows'] = $q->get()->result();
//count query
$q = $this->db->select('COUNT(*) as count', FALSE)
->from('sites');
$tmp = $q->get()->result();
$ret['num_rows'] = $tmp[0]->count;
return $ret;
}
**//sites details
function site_detail($siteID){
$this->db->select()->from('sites')->where('siteID', $siteID);
$query = $this->db->get();
return $query->first_row('array');
}
}**
View
<div id="right">
<h5>Site Details</h5>
<ul>
<li><?php $site_detail['siteID']?></li>
<li><?php $site_detail['site_title']?></li>
</div>

Categories