Welcome Guest, Not a member yet? Register   Sign In
can you help... in Pagination I modified View and Controller function
#1

(This post was last modified: 06-29-2018, 11:57 PM by lsepolis123.)

can you help... in Pagination I modified View and Controller function - I read some paragraphs from >>>

https://www.codeigniter.com/userguide3/l...ation.html

I am getting something like  >    // echo $this->pagination->create_links();  // this i inserted in View

‹ First<234

I plan to apply CSS3 but the problem is these all urls the DATA is the same ARE ALL 7 ROWS ALWAYS... AND NOT 2 PER PAGE // I PUT TWO 2 TO TEST IT

http://localhost/repos/.../admin/videos/all/
http://localhost/repos/.../admin/videos/all/2
http://localhost/repos/.../admin/videos/all/4
http://localhost/repos/.../admin/videos/all/6

WELL???

controller
PHP Code:
    public function all()
    {

 
       // Pagination from https://www.codeigniter.com/userguide3/libraries/pagination.html
 
       $this->load->library('pagination');

 
       $config['base_url'] = 'http://localhost/repos/.../admin/videos/all/';

 
       $config['enable_query_strings'] = TRUE;


 
       $data['videos'] = $this->Video_model->get_list_public(); 

 
       $subject_options = array();
 
       $subject_options[0] = 'Select Subject';

 
       $subject_list $this->Subject_model->get_list(16);   //  $this->user_id
 
       foreach ($subject_list as $subject) {
 
           $subject_options[$subject->id] = $subject->name;
 
       }

 
       $data['subject_options'] = $subject_options;


 
       $config['total_rows'] = count($data['videos']);
 
       $config['per_page'] = 2;
 
       
        $this
->pagination->initialize($config);
 
       
        
//echo $this->pagination->create_links();


        // Load Template
        
$this->template->load('admin''default''videos/all'$data);
    } 



view
PHP Code:
   <tr>
 
       <td><?php echo $video->id?></td>
        <td><a class="fancybox fancybox.iframe" href="http://www.youtube.com/embed/<?php echo $video->youtube_url?>"><img src="https://img.youtube.com/vi/<?php echo trim($video->youtube_url); ?>/0.jpg" style="width: 150px;"><br><?php echo $video->title?></a></td>
        <td><?php echo $subject_options[$video->subject_id]; ?></td>
        <td><?php echo $video->youtube_published_year?></td>
        <td><?php echo $formatted_date?></td>
        <td>
            <?php echo anchor('admin/videos/view/'.$video->id.'''View''class="btn btn-primary"'); ?>
        </td>
    </tr>
    <?php 
        endforeach
  
    ?>
</table>

<?php echo "<div id='paginationCI'>".$this->pagination->create_links()."</div>"?>

<?php else: ?>

    <p>No videos</p>

<?php endif; ?>
Reply
#2

(This post was last modified: 06-30-2018, 01:56 AM by jreklund.)

You need to add limit and offset to your SQL query.
https://www.codeigniter.com/userguide3/d...ilder::get
https://www.codeigniter.com/userguide3/d...der::limit

In case you want to cheat.
PHP Code:
// Controller
public function page() {
    
$this->load->library('pagination');
    
$config['base_url'] = base_url('admin/ads/page');
    
$config['total_rows'] = $this->db->count_all('ads');
    
$config['per_page'] = 50;
    
$config['uri_segment'] = 4// You may need to change this
    
$this->pagination->initialize($config);
    
    
// You need to change segment(4,1) so it's matching the same number as your uri_segment
    
$offset = (intval($this->uri->segment(4,1))*$config['per_page'])-$config['per_page'];
    
    
$this->data['ads'] = $this->ads_model->get_all_ads($config['per_page'],$offset);
    
$this->load->view('admin/ads/list',$this->data);
}

// Model
public function get_all_ads($limit,$offset) {
    
$this->db->order_by('company''ASC');
    
$query $this->db->get('ads',$limit,$offset);
    return 
$query->result();
}

// application/config/pagination.php - Default setttings
<?php
defined
('BASEPATH') OR exit('No direct script access allowed');

$config['use_page_numbers'] = TRUE;
$config['full_tag_open'] = '<nav aria-label="Page navigation"><ul class="pagination">';
$config['full_tag_close'] = '</ul></nav>';
$config['prev_link'] = 'Prev.';
$config['next_link'] = 'Next';
$config['first_link'] = FALSE;
$config['last_link'] = FALSE;

$config['next_tag_open'] = '<li>';
$config['next_tag_close'] = '</li>';

$config['prev_tag_open'] = '<li>';
$config['prev_tag_close'] = '</li>';

$config['cur_tag_open'] = '<li><span>';
$config['cur_tag_close'] = '</span></li>';

$config['num_tag_open'] = '<li>';
$config['num_tag_close'] = '</li>';
$config['num_links'] = 4
Reply
#3

When looking ad MySQL Select code be careful, the LIMIT offset and rows to return are backwards in CodeIgniter.
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#4

(This post was last modified: 06-30-2018, 06:18 AM by lsepolis123.)

Thank you for your assistance

1
So Model edit required...  and also this 'ASC'); can be ('id', 'DESC'); .. ? // in model without error?

PHP Code:
// Model
public function get_all_ads($limit,$offset) {
 
   $this->db->order_by('company''ASC');
 
   $query $this->db->get('ads',$limit,$offset);
 
   return $query->result();


2
also the file
// application/config/pagination.php - Default setttings

Not exist - but when created Code-igniter take use immediately everywhere Pagination exist? correct?
Reply
#5

(This post was last modified: 07-01-2018, 12:50 AM by lsepolis123.)

$config['total_rows'] = $this->db->count_all('ads');

needed two queries the first to get how many are all videos - rows???  how ^^ this work???



https://www.codeigniter.com/userguide3/d...:count_all

according to this ^^^ gets all rows of table but i want Only public[field public=1] videos count [exist and private[field public=0]]  what to do????
Reply
#6

1. You don't need to sort it. If you already got a good natural order. But I just like to be sure.
2. It's just so you don't need to style it in every file. It it will have the same HTML if you use pagination again.
3. You can count it in PHP if you like, that's just how I did it.
Reply
#7

$config['total_rows'] = $this->db->count_all('videos', 'public=1');

how can count - if have pagination and limit / offset, all videos in table currently having public=1(public is a table field can be 1 or 0)...???
Reply
#8

Haven't tested it, but should work.
PHP Code:
$config['total_rows'] = $this->db->where('public',1)->count_all('videos'); 
Reply
#9

(This post was last modified: 07-03-2018, 02:47 AM by lsepolis123.)

PHP Code:
isset($config['total_rows']) ? '' : ($config['total_rows'] = $this->db->where('public',1)->count_all('videos')) ; 


This is valid so as total_rows calc only if Not isset????
Reply
#10

Sure, but I don't know where you should have it set already. You only need it once in your code.
Reply




Theme © iAndrew 2016 - Forum software by © MyBB