PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum


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

09 September 2015 By
pagination แบ่งหน้า codeigniter


การแบ่งหน้ารายการข้อมูล เป้นอีกส่วนที่น่าสนใจ ในเนื้อหาตอนนี้เราจะมา
ดูในเรื่องการของการเรียกใช้งาน 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




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

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


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



อย่าลืมกด Like กด Share เป็นกำลังใจ ในการสร้างบทความใหม่ๆ น่ะครับ


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