การแบ่งหน้ารายการข้อมูล เป้นอีกส่วนที่น่าสนใจ ในเนื้อหาตอนนี้เราจะมา
ดูในเรื่องการของการเรียกใช้งาน 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> <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> <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'] = '>'; // ข้อความหน้าก่อนหน้า ในที่นี้ใช้สัญลักษณ์ < $config['next_tag_open'] = '<li>'; // แท็กเปิดข้อความแสดงหน้าก่อนหน้า $config['next_tag_close'] = '</li>'; // แท็กปิดข้อความแสดงหน้าก่อนหน้า $config['prev_link'] = '<'; // ข้อความหน้าถัดไป ในที่นี้ใช้สัญลักษณ์ > $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
ถ้าเรามีรุปแบบของตัวเองก็สามารถกำหนดได้ตามต้องการ
และเราจะได้ฟังก์ชั่น 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'] = '>'; // ข้อความหน้าก่อนหน้า ในที่นี้ใช้สัญลักษณ์ < $config['next_tag_open'] = '<li>'; // แท็กเปิดข้อความแสดงหน้าก่อนหน้า $config['next_tag_close'] = '</li>'; // แท็กปิดข้อความแสดงหน้าก่อนหน้า $config['prev_link'] = '<'; // ข้อความหน้าถัดไป ในที่นี้ใช้สัญลักษณ์ > $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'] = '>'; // ข้อความหน้าก่อนหน้า ในที่นี้ใช้สัญลักษณ์ < $config['next_tag_open'] = '<li>'; // แท็กเปิดข้อความแสดงหน้าก่อนหน้า $config['next_tag_close'] = '</li>'; // แท็กปิดข้อความแสดงหน้าก่อนหน้า $config['prev_link'] = '<'; // ข้อความหน้าถัดไป ในที่นี้ใช้สัญลักษณ์ > $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'] = '>'; // ข้อความหน้าก่อนหน้า ในที่นี้ใช้สัญลักษณ์ < $config['next_tag_open'] = '<li>'; // แท็กเปิดข้อความแสดงหน้าก่อนหน้า $config['next_tag_close'] = '</li>'; // แท็กปิดข้อความแสดงหน้าก่อนหน้า $config['prev_link'] = '<'; // ข้อความหน้าถัดไป ในที่นี้ใช้สัญลักษณ์ > $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)); // คืนค่าผลการคิวรี่ } }
สำหรับเนื้อหาตอนหน้าจะเป็นอะไร รอติดตาม
*คำแนะนำ เนื่องจากเนื้อหามีความต่อเนื่อง เพื่อความเข้าใจแต่ต้น
ควรศึกจากตั้งแต่ตอนแรกๆ เพื่อให้เกิดความเข้าใจง่าย