การแบ่งหน้ารายการข้อมูล เป้นอีกส่วนที่น่าสนใจ ในเนื้อหาตอนนี้เราจะมา
ดูในเรื่องการของการเรียกใช้งาน 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));
// คืนค่าผลการคิวรี่
}
}
สำหรับเนื้อหาตอนหน้าจะเป็นอะไร รอติดตาม
*คำแนะนำ เนื่องจากเนื้อหามีความต่อเนื่อง เพื่อความเข้าใจแต่ต้น
ควรศึกจากตั้งแต่ตอนแรกๆ เพื่อให้เกิดความเข้าใจง่าย