black_belt
black_belt

Reputation: 6799

How to display Serial Numbers in a table that has been created using table library in codeigniter?

I know how to create pagination and generate a table containing information from database in codeigniter, but I don't how to display the serial numbers for each row in the table. Example:

SL.  Name           Email
1.  Srijon      [email protected]
2.  Jake        [email protected]

Would you please kindly show me how to do that? Thanks in advance

Here is the controller for how I create pagination and generate table (without serial numbers)

 function index(){

            $this->load->library('pagination');
            $this->load->library('table');
            $this->table->set_heading('Student ID','Student Name','Batch','Edit','Delete');

            $config['base_url'] = 'http://localhost/coaching/index.php/student_list/index';
            $config['total_rows'] = $this->db->get('student')->num_rows();
            $config['per_page'] = 15;
            $config['num_links'] = 20;
            $config['full_tag_open'] = '<div id="pagination" align="center">';
            $config['full_tag_close'] = '</div>';

            $this->pagination->initialize($config);
            $data['tab'] = "Student List";              
            $this->load->model('mod_studentlist');
            $data['records']= $this->mod_studentlist->student_list();
            $data['main_content']='studentlist';
            $this->load->view('includes/template',$data);

        }   

Here's my model

                function student_list()
    {   
        $config['per_page'] = 10;
        $this->db->select('studentid, studentname, batch');
        $this->db->order_by("studentid", "desc"); 
        $rows = $this->db->get('student',$config['per_page'],$this->uri->segment(3))->result_array();


        foreach ($rows as $count => $row)
            {
             $rows[$count]['studentname'] = anchor('student_list/get/'.$row['studentid'],$row['studentname']);
             $rows[$count]['Edit'] = anchor('update_student/update/'.$row['studentid'],'Update');
             $rows[$count]['Delete'] = anchor('report/'.$row['studentid'],'Delete');

            }
        return $rows;
    }

Here's my view file

                 <?php echo $this->table->generate($records);?>
                    <?php  echo $this->pagination->create_links();?>
                    <script type="text/javascript" charset="utf-8">
                        $('tr:odd').css('background','#EAEAEA');
                        </script>

Upvotes: 0

Views: 4984

Answers (3)

pgee70
pgee70

Reputation: 4014

Have you thought about doing this on the client? the javascript library datatables is brilliant. it can handle the sorting for you at the user side, and can be made to dynamically retrieve information using ajax, so load times are fast on large tables. for under < 100 rows or so there probably isn't a need though. i have it sorting/filtering tables with >100 000 rows with no problems at all (using ajax)

unless the serial numbers have semantic meaning don't show them to the client. it just more stuff for them to filter. if they are required for your code, but not for the user to see, just hide them away in a data attribute or something.

Upvotes: 0

rtan
rtan

Reputation: 55

Codeigniter has a great Table library to display data in html table format. Adding a Serial No is sometime required to a table, but Row num is not easily provided by MySQL hence while using Table library this function is added to do the job.

Here goes the code:

 /**  
    * Set the serial no  
    *  
    * Add serial no to left of table  
    *  
    * @access  public  
    * @param  mixed  
    * @return  mixed  
    */  
   function add_sr_no(&$arr)  
   {  if (!is_array($arr)) return $arr;  
     $i=1;  
     foreach ($arr as &$values) {        
       if (!is_array($values))  
         break;  
       else  
         array_unshift($values, $i++);  
     }      
     return $arr;  
   }  

Just add these lines to table.php in library. Usage:

$rows = $query->result_array(); 
$this->table->add_sr_no($rows); 

Don't forget to add first column 'Sr No' in set_heading. Read the post here. Hope this helps.

Upvotes: 0

cenanozen
cenanozen

Reputation: 1130

You should create a variable inside your model function:

<?php
function student_list()
{   
    $config['per_page'] = 10;
    $this->db->select('studentid, studentname, batch');
    $this->db->order_by("studentid", "desc"); 
    $rows = $this->db->get('student',$config['per_page'],$this->uri->segment(3))->result_array();

    $sl = $this->uri->segment(3) + 1; // so that it begins from 1 not 0

    foreach ($rows as $count => $row)
        {
         array_unshift($rows[$count], $sl.'.');
         $sl = $sl + 1;

         $rows[$count]['studentname'] = anchor('student_list/get/'.$row['studentid'],$row['studentname']);
         $rows[$count]['Edit'] = anchor('update_student/update/'.$row['studentid'],'Update');
         $rows[$count]['Delete'] = anchor('report/'.$row['studentid'],'Delete');
        }
    return $rows;
}

and modify your controller:

<?php
function index() {
    $this->load->library('pagination');
    $this->load->library('table');
    $this->table->set_heading('SL.', 'Student ID','Student Name','Batch','Edit','Delete');
    ....

Upvotes: 2

Related Questions