PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

การแบ่งหน้าข้อมูลด้วย pagination class ใน codeigniter

09 September 2015 By


การแบ่งหน้ารายการข้อมูล เป้นอีกส่วนที่น่าสนใจ ในเนื้อหาตอนนี้เราจะมา
ดูในเรื่องการของการเรียกใช้งาน pagination class ใน codeigniter 
ที่จะช่วยให้การเรียกใช้งานการแบ่งหน้าข้อมูลทำได้ง่ายๆ
 
สำหรับส่วนของโปรเจ็คที่เราจะนำมากล่าวประกอบก็คือ ในหน้าแสดงรายการ
ของ service ในระบบ admin หากใครติดตาม และฝึกทำไปพร้อมกันมาแต่ต้น
ก็สามารถนำมาใช้งานได้เลย แต่ถ้าใครแวะมาดูเป็นข้อมูล ก็สามารถศึกษารูปแบบ
เป็นแนวทางในการประยุกต์ได้ แต่ต้องบอกก่อนว่าเนื้อหาในเรื่อง codeigniter จะเป็น
แนวทารประยุกต์ ทุกส่วนจะสัมพันธ์กันมาแต่ต้น
 
 

การแบ่งหน้าข้อมูลด้วย pagination class 

 
ก่อนอื่นเราต้องโหลด pagination class 
ให้เปิดไฟล์ Service_model.php ในโฟลเดอร์ apps > models > admin 
โดยให้เพิ่ม
 
$this->load->library('pagination');
 
เข้าใปในส่วนของฟังก์ชั่น __contruct()
 
เป็นดังนี้
 
    public function __construct()
    {
        parent::__construct();
        $this->load->library('form_validation');
        $this->form_validation->set_error_delimiters('<div class="bg-danger" style="padding:3px 10px;">', '</div>');
        $this->load->library('upload');
        $this->load->helper('path');
        $this->load->library('pagination');
    }
 
 
ต่อไป ก่อนที่เราจะลงไปในรายละเอียดเพิ่มเติม เรามาดูว่ารูปแบบ URL สำหรับหน้า
แสดงรายการของเราจะกำหนดให้เป็นแบบไหน โดยข้อย้อนอธิบายที่มาของ URL ตามนี้
 
/////////////////////////////////////  
ในส่วนนี้จะอธิบายข้อมูลเดิม ใครอ่านแล้วงง ให้ข้ามไป
///////////////////////////////////
 
เรารู้ว่าหน้าแรกของระบบจัดการ service ของ admin จะมี URL ที่
 
http://localhost/learnci/admin/service/
รูปแบบเดิมคือ
http://localhost/learnci/admin/index/service/
แยกวิเคราะห์ตามรูปแบบโครงสร้างการกำหนด URI
http://localhost/learnci/ชื่อ class/ชื่อ function/parameter ตัวที่ 1/
 
ตอนนี้ในส่วนของ parameter ของระบบ service เรามีสูงสุดที่สามตัว ตัวอย่าง
http://localhost/learnci/admin/service/edit/2
มาจาก
http://localhost/learnci/admin/index/service/edit/2
ตัดมาเฉพาะ parameter จะประกอบด้วย
- service 
- edit
- 2
 
หากอ้างอิงจากไฟล์ Admin.php ในโฟลเดอร์ apps > controllers > 
 
    public function index($admin_pages="home",$action=null,$id=null)  
    {  
      ................
    }
 
service คือตัวแปร $admin_pages เป็น parameter แรก
edit คือตัวแปร $action เป็น parameter ตัวที่ 2 
2 คือ ตัวแปร $id  เป็น parameter ตัวที่ 3
 
เมื่อดูประกอบกับการกำหนด URI Routing ในไฟล์ routes.php ในโฟลเดอร์ apps > config 
ในส่วนของการกำหนด URL สำหรับ parameter 3  ตัว
จากรูปแบบ
 
$route['admin/(:any)/(:any)/(:num)'] = 'admin/index/$1/$2/$3';
 
จากรูปแบบ
admin / อะไรก็ได้ / อะไรก็ได้ / ตัวเลข
ก็จะได้เป็น
admin/service/edit/2
 
ดังนั้นเมื่อพิจารณาตามความเข้าใจข้างต้นแล้ว
หน้าแรกของระบบ service คือ
http://localhost/learnci/admin/service/
จะมี parameter 2 ตัวคือ
service และ ค่าว่างด้านหลัง (ก็คืออไรก็ได้) 
ค่าตัวที่สองก็คือตัวแปร $action แต่มีค่า null
 
///////////////////////////////////// จบส่วยของการอธิบายที่มาที่ไปความเดิม
 
 

ทีนี้เรามาดูที่โค้ดไฟล์ admin_service.php ในส่วนของ $action เท่ากับ null

 
<?php if($action==null){?>
<?php
$result = $this->service_model->getlist();
?>
<a href="<?=base_url('admin/service/create')?>" class="btn btn-primary btn-sm">Create</a>
<br><br>
<table class="table table-striped table-bordered table-condensed">
    <thead>
        <tr>
            <th width="50" class="text-center">#</th>
            <th>Title</th>
            <th width="150" class="text-center">Modify Date</th>
            <th width="150" class="text-center">Manage</th>
        </tr>
    </thead>
    <tbody>
        <?php
        $i_num=0;
        if(count($result)>0){
            foreach($result as $row){
                $i_num++;
        ?>
        <tr>
            <td class="text-center"><?=$i_num?></td>
            <td><?=$row['service_title']?></td>
            <td class="text-center"><?=$row['service_update']?></td>
            <td class="text-center">
                <a href="<?=base_url('admin/service/edit/'.$row['service_id'])?>" class="btn btn-success btn-sm">
                <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
                </a>
                &nbsp;&nbsp;
                 <a href="<?=base_url('admin/service/delete/'.$row['service_id'])?>" class="btn btn-danger btn-sm">
                <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
                </a>
                
            </td>
        </tr>
        <?php } ?>
        <?php } ?>
    </tbody>
</table>
<?php } ?>
 
ในหน้านี้จะแสดงรายการทั้งหมด ไม่ได้มีการแบ่งหน้า ดึงข้อมูลมาจากฟ้งก์ชั่น getlist() ที่เราได้เขียน
ไว้ใน Service_model.php โดยเราจะใช้ส่วนนี้สำหรับเพิ่มเติมในส่วนของการแบ่งหน้า
 
เริ่มแบบ URL ของหน้านี้
 
http://localhost/learnci/admin/service/
 
และเราจะให้มีรูปแบบเป็น
 
http://localhost/learnci/admin/service/page/1
 
page คือค่าจากตัวแปร $action 
1 คือค่าจากตัวแปร $id (ไว้ใช้เป็นหน้าเพจ ข้อมูล)
 
ดังนั้นให้เพิ่มในส่วนของ $action เข้าไปดังนี้
 
<?php if($action==null  || $action=='page'){?>
 
ซึ่งหมายถึง ถ้า $action เป็นค่าว่าง หรือ มีค่าเท่ากับ page ก็ให้แสดงส่วนนี้
จึงทำให้
http://localhost/learnci/admin/service/ และ
http://localhost/learnci/admin/service/page/  กลายเป็นหน้าเดียวกัน
 
ต่อไปในส่วนของ ฟังก์ชั่นในการดึงข้อมูล จากเดิมเราไม่มีการแบ่งหน้า จึงไม่มีการส่งค่า
เข้าไปในฟังก์ชั่น แต่กรณีนี้ เราจะส่งหน้าเพจข้อมูลเข้าไปในฟังก์ชั่น getlist();
จึงกำหนดเพิ่มเข้าไปเป็นดังนี้
 
$result = $this->service_model->getlist($id);
 
ต่อมาหากเรามีลำดับรายการของข้อมูล ตามโค้ดคือตัวแปร $i_num
ก็ให้กำหนดค่าใหม่จากเดิมคือ ตรวจสอบ $id
 
        if(!isset($id)){
            $id=1;  // ถ้าไม่มีเลขหน้า ให้มีค่าเข้า 1 ซึ่งก็คือหน้าแรก
        }
 
และเปลี่ยนส่วนของการเลขลำดับเป็นดังนี้
 
<td class="text-center"><?=$i_num?></td>
// ก็เปลี่ยนเป็น
<td class="text-center"><?=(($id-1)*5)+$i_num?></td>
 
เลข 5 คือจำนวนที่เรากำหนดให้แสดงในแต่ละหน้า ถ้าเป็นค่าอื่นก็เปลี่ยนเลข 5 เป็นเลขอื่น
เลขลำดับก็คือ เช่น ถ้าเราแบ่งที่ละ 5 เลขลำดับของหน้าสองจะต้องเริ่มต้นเท่ากับเลข 6 
แบบนี้เป็นต้น
 
และส่วนสุดท้าย เป็นส่วนของการเรียกใช้งาน แสดงเลขแบ่งหน้า ให้ใช้เป็นดังนี้
 
<?php
echo $this->pagination->create_links();
?>
 
โดยแทรกไว้ด้านล่างสุด 
 
เราจะได้ส่วนของการแสดงข้อมูลแบบแบ่งหน้า ดังนี้
 
<?php if($action==null  || $action=='page'){?>
<?php
$result = $this->service_model->getlist($id);
?>
<a href="<?=base_url('admin/service/create')?>" class="btn btn-primary btn-sm">Create</a>
<br><br>
<table class="table table-striped table-bordered table-condensed">
    <thead>
        <tr>
            <th width="50" class="text-center">#</th>
            <th>Title</th>
            <th width="150" class="text-center">Modify Date</th>
            <th width="150" class="text-center">Manage</th>
        </tr>
    </thead>
    <tbody>
        <?php
        $i_num=0;
        if(!isset($id)){
            $id=1;  // ถ้าไม่มีเลขหน้า ให้มีค่าเข้า 1 ซึ่งก็คือหน้าแรก
        }
        if(count($result)>0){
            foreach($result as $row){
                $i_num++;
        ?>
        <tr>
            <td class="text-center"><?=(($id-1)*5)+$i_num?></td>
            <td><?=$row['service_title']?></td>
            <td class="text-center"><?=$row['service_update']?></td>
            <td class="text-center">
                <a href="<?=base_url('admin/service/edit/'.$row['service_id'])?>" class="btn btn-success btn-sm">
                <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
                </a>
                &nbsp;&nbsp;
                 <a href="<?=base_url('admin/service/delete/'.$row['service_id'])?>" class="btn btn-danger btn-sm">
                <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
                </a>
                
            </td>
        </tr>
        <?php } ?>
        <?php } ?>
    </tbody>
</table>
<?php
echo $this->pagination->create_links();
?>
<?php } ?>
 
ส่วนของการแสดงข้อมูลเป็นอันเสร็จเรียบร้อย


 

ต่อไปเรามาจัดการในส่วนของการกำหนดรูปแบบการแบ่งหน้า

กลับมาที่ไฟล์ Service_model.php ในโฟลเดอร์ apps > models > admin

เราจะมาดูในส่วนของฟังก์ชัน getlist();
โค้ดฟ้งก์ชั่นเดิมคือ
 
    public function getlist(){
        $query = $this->db->get('tbl_service');
        return $query->result_array();
    }    
 
เป็นการดึงข้อมูลจากตาราง tbl_service ทั้งหมดแล้วก็ส่งค่ากลับไปแสดง
แต่เนื่องจากรูปแบบใหม่มีการแบ่งหน้า และมีการรับค่า $id เข้ามาด้วยจึงได้เป็
รูปแบบจึงเป็นดังนี้
 
    public function getlist($id){
        $query = $this->db->get('tbl_service',5,0);
        return $query->result_array();
    }    
 
สังเกตการกำหนด parameter อีก 2 ตัวเข้าไปในฟังก์ชั่น get()
เลข 5  คือจำนวนที่ต้องการแสดงข้อมูลแต่ละหน้า
เลข 0 คือตำแหน่งเริ่มต้น
จากโค้ดจะได้คำสั่ง SQL คือ SELECT * FROM tbl_service LIMIT 0,5
 
ต่อไปเราจะกำหนดอ้างอิงจากค่า $id หรือหน้าเพจที่ส่งเข้ามา เพื่อระบุตำแหน่ง
เริ่มต้นของข้อมูลที่ต้องการดึง โดยกำหนดเป็นตัวแปรเพิ่มเดิมดังนี้
 
    public function getlist($id){
        $begin=(isset($id) && $id>1)?($id-1)*5:0;
        $query = $this->db->get('tbl_service',5,$begin);
        return $query->result_array();
    }    
 
จากโค้ดถ้าหน้าแรก ถ้ามีค่า $id และ $id>1 ค่าเริ่มต้น $begin  จะเท่ากับ ($id-1)*5
สมมติ $id เท่ากับ 1 ค่า $begin จะเท่ากับ 0
สมมติ $id เท่ากับ 2 ค่า $begin จะเท่ากับ 5
สมมติ $id เท่ากับ 3 ค่า $begin จะเท่ากับ 10
 

และส่วนสุดท้ายในการกำหนดการใช้งาน pagination class ก็คือส่วนของการตั้งค่าต่างๆ

ขออธิบายในโค้ดดังนี้

 
        $config['base_url'] = base_url('admin/service/page/'); // url  เพจข้อมูลของเรา      
        $config['per_page'] = 5;  // จำนวนแสดงต่อหน้า
        $config['num_links'] = 2; // จำนวนเลขซ้ายขวา เช่น 1 2 3 4 5 คือหน้า 2 หลัง 2
        $config['use_page_numbers'] = TRUE;  // แสดงเลขหน้าตามจริง เช่นหน้า 1 ก็เป็นเลข 1
        // ส่วนของการกำหนดหน้าตาของ การแบ่งหน้า เนื่องจากเราใช้ bootstrap css จึงสามารถนำมาใช้ได้เลย
        $config['full_tag_open'] = '<nav><ul class="pagination">'; // เปิดแท็กทั้งหมด
        $config['full_tag_close'] = '</ul><nav>'; // ปิดแท็กทั้งหมดด้วย
        $config['first_link'] = 'First'; // ข้อความแสดงหน้าแรก
        $config['first_tag_open'] = '<li>'; // แท็กเปิดข้อความหน้าแรก
        $config['first_tag_close'] = '</li>'; // แท็กปิดข้อความหน้าแรก
        $config['first_url'] = '';  //url หน้าแรก
        $config['last_link'] = 'Last'; // ข้อความสแดงหน้าสุดท้าย
        $config['last_tag_open'] = '<li>';  // แท็กเปิดข้อความหน้าสุดท้าย
        $config['last_tag_close'] = '</li>'; // แท็กปิดข้อความหน้าสุดท้าย
        $config['next_link'] = '&gt;';  // ข้อความหน้าก่อนหน้า ในที่นี้ใช้สัญลักษณ์ <
        $config['next_tag_open'] = '<li>';  // แท็กเปิดข้อความแสดงหน้าก่อนหน้า
        $config['next_tag_close'] = '</li>'; // แท็กปิดข้อความแสดงหน้าก่อนหน้า
        $config['prev_link'] = '&lt;';  // ข้อความหน้าถัดไป ในที่นี้ใช้สัญลักษณ์ >
        $config['prev_tag_open'] = '<li>'; // แท็กเปิดข้อความหน้าถัดไป
        $config['prev_tag_close'] = '</li>';  // แท็กปิดข้อความหน้าถัดไป
        $config['cur_tag_open'] = '<li class="active"><a href="javascript:void();">'; // แท็กหน้าเลขเพจปัจจุบัน
        $config['cur_tag_close'] = '</a></li>'; // แท้กปิดหน้าเพจปัจจุบัน
        $config['num_tag_open'] = '<li>'; // แท็กเปิดหน้าเพจเลขต่างๆ
        $config['num_tag_close'] = '</li>';  // แท็ปิดหน้าเพจเลขต่างๆ
        
        // หาจำนวนทั้งหมด
        $config['total_rows'] = $this->db->count_all('tbl_service');  // จำนวนทั้งหมด
        $this->pagination->initialize($config);  // ตั้งค่าการกำหนด การแบ่งหน้า    
        
        // หาจำนวนทั้งหมด
        $config['total_rows'] = $this->db->count_all('tbl_service');  // จำนวนทั้งหมด
        $this->pagination->initialize($config);  // ตั้งค่าการกำหนด การแบ่งหน้า        
 

เนื่องจากรูปแบบเพจ เราใช้ css จาก bootstrap 
http://getbootstrap.com/components/#pagination
 
ถ้าเรามีรุปแบบของตัวเองก็สามารถกำหนดได้ตามต้องการ

และเราจะได้ฟังก์ชั่น  getlist($id){ ทั้งหมดเป็นดังนี้

 
    public function getlist($id){
        
        $config['base_url'] = base_url('admin/service/page/'); // url  เพจข้อมูลของเรา      
        $config['per_page'] = 5;  // จำนวนแสดงต่อหน้า
        $config['num_links'] = 2; // จำนวนเลขซ้ายขวา เช่น 1 2 3 4 5 คือหน้า 2 หลัง 2
        $config['use_page_numbers'] = TRUE;  // แสดงเลขหน้าตามจริง เช่นหน้า 1 ก็เป็นเลข 1
        // ส่วนของการกำหนดหน้าตาของ การแบ่งหน้า เนื่องจากเราใช้ bootstrap css จึงสามารถนำมาใช้ได้เลย
        $config['full_tag_open'] = '<nav><ul class="pagination">'; // เปิดแท็กทั้งหมด
        $config['full_tag_close'] = '</ul><nav>'; // ปิดแท็กทั้งหมดด้วย
        $config['first_link'] = 'First'; // ข้อความแสดงหน้าแรก
        $config['first_tag_open'] = '<li>'; // แท็กเปิดข้อความหน้าแรก
        $config['first_tag_close'] = '</li>'; // แท็กปิดข้อความหน้าแรก
        $config['first_url'] = '';  //url หน้าแรก
        $config['last_link'] = 'Last'; // ข้อความสแดงหน้าสุดท้าย
        $config['last_tag_open'] = '<li>';  // แท็กเปิดข้อความหน้าสุดท้าย
        $config['last_tag_close'] = '</li>'; // แท็กปิดข้อความหน้าสุดท้าย
        $config['next_link'] = '&gt;';  // ข้อความหน้าก่อนหน้า ในที่นี้ใช้สัญลักษณ์ <
        $config['next_tag_open'] = '<li>';  // แท็กเปิดข้อความแสดงหน้าก่อนหน้า
        $config['next_tag_close'] = '</li>'; // แท็กปิดข้อความแสดงหน้าก่อนหน้า
        $config['prev_link'] = '&lt;';  // ข้อความหน้าถัดไป ในที่นี้ใช้สัญลักษณ์ >
        $config['prev_tag_open'] = '<li>'; // แท็กเปิดข้อความหน้าถัดไป
        $config['prev_tag_close'] = '</li>';  // แท็กปิดข้อความหน้าถัดไป
        $config['cur_tag_open'] = '<li class="active"><a href="javascript:void();">'; // แท็กหน้าเลขเพจปัจจุบัน
        $config['cur_tag_close'] = '</a></li>'; // แท้กปิดหน้าเพจปัจจุบัน
        $config['num_tag_open'] = '<li>'; // แท็กเปิดหน้าเพจเลขต่างๆ
        $config['num_tag_close'] = '</li>';  // แท็ปิดหน้าเพจเลขต่างๆ
        
        // หาจำนวนทั้งหมด
        $config['total_rows'] = $this->db->count_all('tbl_service');  // จำนวนทั้งหมด
        $this->pagination->initialize($config);  // ตั้งค่าการกำหนด การแบ่งหน้า        
        
        $begin=(isset($id) && $id>1)?($id-1)*$config['per_page']:0;
        $query = $this->db->get('tbl_service',$config['per_page'],$begin);
        return $query->result_array();
    }    
 
 
เป็นอันเสร็จเรียบร้อยในส่วนของการใช้งานการแบ่งหน้ารายการข้อมูลด้วย pagination class

 
เพิ่มเติม 
เราสามารถกำหนดรูปแบบ pagination ไว้ในไฟล์ pagination.php แทนได้ 
โดยนำค่าที่ไม่ได้มีการปรับแต่งหรือไม่แปรผันตามข้อมูล หรือไม่ได้ใช้งานสัมพันธ์กับข้อมูล
อื่นไปไว้ วิธีการคือ ให้เราสร้างไฟล์ชื่อ pagination.php ไว้ในโฟลเดอร์ apps > config
 
ตัวอย่างโค้ดไฟล์ pagination.php
 
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

$config['num_links'] = 2; // จำนวนเลขซ้ายขวา เช่น 1 2 3 4 5 คือหน้า 2 หลัง 2
$config['use_page_numbers'] = TRUE;  // แสดงเลขหน้าตามจริง เช่นหน้า 1 ก็เป็นเลข 1
// ส่วนของการกำหนดหน้าตาของ การแบ่งหน้า เนื่องจากเราใช้ bootstrap css จึงสามารถนำมาใช้ได้เลย
$config['full_tag_open'] = '<nav><ul class="pagination">'; // เปิดแท็กทั้งหมด
$config['full_tag_close'] = '</ul><nav>'; // ปิดแท็กทั้งหมดด้วย
$config['first_link'] = 'First'; // ข้อความแสดงหน้าแรก
$config['first_tag_open'] = '<li>'; // แท็กเปิดข้อความหน้าแรก
$config['first_tag_close'] = '</li>'; // แท็กปิดข้อความหน้าแรก
$config['first_url'] = '';  //url หน้าแรก
$config['last_link'] = 'Last'; // ข้อความสแดงหน้าสุดท้าย
$config['last_tag_open'] = '<li>';  // แท็กเปิดข้อความหน้าสุดท้าย
$config['last_tag_close'] = '</li>'; // แท็กปิดข้อความหน้าสุดท้าย
$config['next_link'] = '&gt;';  // ข้อความหน้าก่อนหน้า ในที่นี้ใช้สัญลักษณ์ <
$config['next_tag_open'] = '<li>';  // แท็กเปิดข้อความแสดงหน้าก่อนหน้า
$config['next_tag_close'] = '</li>'; // แท็กปิดข้อความแสดงหน้าก่อนหน้า
$config['prev_link'] = '&lt;';  // ข้อความหน้าถัดไป ในที่นี้ใช้สัญลักษณ์ >
$config['prev_tag_open'] = '<li>'; // แท็กเปิดข้อความหน้าถัดไป
$config['prev_tag_close'] = '</li>';  // แท็กปิดข้อความหน้าถัดไป
$config['cur_tag_open'] = '<li class="active"><a href="javascript:void();">'; // แท็กหน้าเลขเพจปัจจุบัน
$config['cur_tag_close'] = '</a></li>'; // แท้กปิดหน้าเพจปัจจุบัน
$config['num_tag_open'] = '<li>'; // แท็กเปิดหน้าเพจเลขต่างๆ
$config['num_tag_close'] = '</li>';  // แท็ปิดหน้าเพจเลขต่างๆ
 
จากนั้นใน ฟังก์ชั่น getlist($id) ในไฟล์ Service_model.php เราก็คงเฉพาะส่วนที่
ต้องการปรับค่าหรือ ส่วนที่ต้องการใช้ข้อมูลไว้ จะได้เป็น
 
    public function getlist($id){
        
        $config['base_url'] = base_url('admin/service/page/'); // url  เพจข้อมูลของเรา      
        $config['per_page'] = 5;  // จำนวนแสดงต่อหน้า      
        
        // หาจำนวนทั้งหมด
        $config['total_rows'] = $this->db->count_all('tbl_service');  // จำนวนทั้งหมด
        $this->pagination->initialize($config);  // ตั้งค่าการกำหนด การแบ่งหน้า        
        
        $begin=(isset($id) && $id>1)?($id-1)*$config['per_page']:0;
        $query = $this->db->get('tbl_service',$config['per_page'],$begin);
        return $query->result_array();
    }    
 
แบบนี้โค้ดจะดูไม่รก หรือยาวเกินไป
 

ไฟล์ Service_model.php ทั้งหมดในตอนนี้

 
<?php
class Service_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();
        $this->load->library('form_validation');
        $this->form_validation->set_error_delimiters('<div class="bg-danger" style="padding:3px 10px;">', '</div>');
        $this->load->library('upload');
        $this->load->helper('path');
        $this->load->library('pagination');
    }
    
    public function getlist($id){
        
        $config['base_url'] = base_url('admin/service/page/'); // url  เพจข้อมูลของเรา      
        $config['per_page'] = 5;  // จำนวนแสดงต่อหน้า
        $config['num_links'] = 2; // จำนวนเลขซ้ายขวา เช่น 1 2 3 4 5 คือหน้า 2 หลัง 2
        $config['use_page_numbers'] = TRUE;  // แสดงเลขหน้าตามจริง เช่นหน้า 1 ก็เป็นเลข 1
        // ส่วนของการกำหนดหน้าตาของ การแบ่งหน้า เนื่องจากเราใช้ bootstrap css จึงสามารถนำมาใช้ได้เลย
        $config['full_tag_open'] = '<nav><ul class="pagination">'; // เปิดแท็กทั้งหมด
        $config['full_tag_close'] = '</ul><nav>'; // ปิดแท็กทั้งหมดด้วย
        $config['first_link'] = 'First'; // ข้อความแสดงหน้าแรก
        $config['first_tag_open'] = '<li>'; // แท็กเปิดข้อความหน้าแรก
        $config['first_tag_close'] = '</li>'; // แท็กปิดข้อความหน้าแรก
        $config['first_url'] = '';  //url หน้าแรก
        $config['last_link'] = 'Last'; // ข้อความสแดงหน้าสุดท้าย
        $config['last_tag_open'] = '<li>';  // แท็กเปิดข้อความหน้าสุดท้าย
        $config['last_tag_close'] = '</li>'; // แท็กปิดข้อความหน้าสุดท้าย
        $config['next_link'] = '&gt;';  // ข้อความหน้าก่อนหน้า ในที่นี้ใช้สัญลักษณ์ <
        $config['next_tag_open'] = '<li>';  // แท็กเปิดข้อความแสดงหน้าก่อนหน้า
        $config['next_tag_close'] = '</li>'; // แท็กปิดข้อความแสดงหน้าก่อนหน้า
        $config['prev_link'] = '&lt;';  // ข้อความหน้าถัดไป ในที่นี้ใช้สัญลักษณ์ >
        $config['prev_tag_open'] = '<li>'; // แท็กเปิดข้อความหน้าถัดไป
        $config['prev_tag_close'] = '</li>';  // แท็กปิดข้อความหน้าถัดไป
        $config['cur_tag_open'] = '<li class="active"><a href="javascript:void();">'; // แท็กหน้าเลขเพจปัจจุบัน
        $config['cur_tag_close'] = '</a></li>'; // แท้กปิดหน้าเพจปัจจุบัน
        $config['num_tag_open'] = '<li>'; // แท็กเปิดหน้าเพจเลขต่างๆ
        $config['num_tag_close'] = '</li>';  // แท็ปิดหน้าเพจเลขต่างๆ
        
        // หาจำนวนทั้งหมด
        $config['total_rows'] = $this->db->count_all('tbl_service');  // จำนวนทั้งหมด
        $this->pagination->initialize($config);  // ตั้งค่าการกำหนด การแบ่งหน้า        
        
        $begin=(isset($id) && $id>1)?($id-1)*$config['per_page']:0;
        $query = $this->db->get('tbl_service',$config['per_page'],$begin);
        return $query->result_array();
    }     
    
    public function create(){
        $config['upload_path'] = './upload/';  // โฟลเดอร์ ตำแหน่งเดียวกับ root ของโปรเจ็ค
        $config['allowed_types'] = 'gif|jpg|png'; // ปรเเภทไฟล์ 
        $config['max_size']     = '0';  // ขนาดไฟล์ (kb)  0 คือไม่จำกัด ขึ้นกับกำหนดใน php.ini ปกติไม่เกิน 2MB
        $config['max_width'] = '1024';  // ความกว้างรูปไม่เกิน
        $config['max_height'] = '768'; // ความสูงรูปไม่เกิน
        $config['file_name'] = 'mypicture';  // ชื่อไฟล์ ถ้าไม่กำหนดจะเป็นตามชื่อเพิม

        $this->upload->initialize($config);    // เรียกใช้การตั้งค่า  
        $this->upload->do_upload('service_image'); // ทำการอัพโหลดไฟล์จาก input file ชื่อ service_image
        
        $file_upload="";  // กำหนดชื่อไฟล์เป็นค่าว่าง 
        if(!$this->upload->display_errors()){ // ถ้าไม่มี error อัพไฟล์ได้ ให้เอาใช้ไฟล์ใส่ตัวแปร ไว้บันทึกลงฐานข้อมูล
            $file_upload=$this->upload->data('file_name');
        }
        $newdata = array(
            'service_id' => NULL,
            'service_title' => $this->input->post('service_title'),
            'service_detail' => $this->input->post('service_detail'),
            'service_img' => $file_upload,
            'service_update' => date("Y-m-d H:i:s")
        );
        return $this->db->insert('tbl_service', $newdata);                
    }
    
    public function view($id){  // มี $id เป็น parameter ไว้กำหนดเงื่อนไข
        $query = $this->db->get_where('tbl_service',array('service_id'=>$id));
        return $query->row_array(); // ส่งข้อมูลผลัพธ์กลับเป็น array แถวข้อมูล
    }    
    
    public function edit($id){
        $config['upload_path'] = './upload/';  // โฟลเดอร์ ตำแหน่งเดียวกับ root ของโปรเจ็ค
        $config['allowed_types'] = 'gif|jpg|png'; // ปรเเภทไฟล์ 
        $config['max_size']     = '0';  // ขนาดไฟล์ (kb)  0 คือไม่จำกัด ขึ้นกับกำหนดใน php.ini ปกติไม่เกิน 2MB
        $config['max_width'] = '1024';  // ความกว้างรูปไม่เกิน
        $config['max_height'] = '768'; // ความสูงรูปไม่เกิน
        $config['file_name'] = 'mypicture';  // ชื่อไฟล์ ถ้าไม่กำหนดจะเป็นตามชื่อเพิม

        $this->upload->initialize($config);    // เรียกใช้การตั้งค่า  
        
        $fileExist=$this->input->post('d_service_image');
        if(file_exists($fileExist) && is_file($fileExist)){
            unlink($fileExist);  
            $file_upload="";
        }else{
            $file_upload=$this->input->post('h_service_image');  // เก็บชื่อไฟล์เพิมถ้ามี
            $fileCheck = './upload/'.$file_upload;   
            $full_fileCheck = set_realpath($fileCheck);
            if(!file_exists($full_fileCheck) || !is_file($full_fileCheck)){
                $file_upload="";
            }
        }
                
        $this->upload->do_upload('service_image'); // ทำการอัพโหลดไฟล์จาก input file ชื่อ service_image        
        if(!$this->upload->display_errors()){ // ถ้าไม่มี error อัพไฟล์ได้ ให้เอาใช้ไฟล์ใส่ตัวแปร ไว้บันทึกลงฐานข้อมูล
            $file_upload=$this->upload->data('file_name');  // เก็บชื่อไฟล์ใหม่           
        }else{
            // ถ้า error ในกรณีเลือกไฟล์แล้วไม่ผ่าน
            if($this->upload->data('file_type')){ // เช่น ประเภทไม่ถูกต้อง
                return; // ต้อง return เพื่อให้แสดง error
            }
        }        
        $newdata = array(
            'service_title' => $this->input->post('service_title'),
            'service_detail' => $this->input->post('service_detail'),
            'service_img' => $file_upload,
            'service_update' => date("Y-m-d H:i:s")
        );
        return $this->db->update('tbl_service', $newdata,array('service_id'=>$id));
    }  
    
    public function delete($id){
        return $this->db->delete('tbl_service', array('service_id' =>$id)); 
        // คืนค่าผลการคิวรี่
    }        

}
 
 
 
สำหรับเนื้อหาตอนหน้าจะเป็นอะไร รอติดตาม
*คำแนะนำ เนื่องจากเนื้อหามีความต่อเนื่อง เพื่อความเข้าใจแต่ต้น
ควรศึกจากตั้งแต่ตอนแรกๆ เพื่อให้เกิดความเข้าใจง่าย

Tags:: แบ่งหน้า pagination codeigniter

เนื้อหาพิเศษ เฉพาะสำหรับสมาชิก

กรุณาล็อกอิน และลงชื่อติดตาม


สมัครสมาชิกได้ที่        ล็อกอินได้ที่   





URL สำหรับอ้างอิง