การแบ่งหน้ารายการข้อมูล เป้นอีกส่วนที่น่าสนใจ ในเนื้อหาตอนนี้เราจะมา
ดูในเรื่องการของการเรียกใช้งาน pagination class ใน codeigniter
ที่จะช่วยให้การเรียกใช้งานการแบ่งหน้าข้อมูลทำได้ง่ายๆ
สำหรับส่วนของโปรเจ็คที่เราจะนำมากล่าวประกอบก็คือ ในหน้าแสดงรายการ
ของ service ในระบบ admin หากใครติดตาม และฝึกทำไปพร้อมกันมาแต่ต้น
ก็สามารถนำมาใช้งานได้เลย แต่ถ้าใครแวะมาดูเป็นข้อมูล ก็สามารถศึกษารูปแบบ
เป็นแนวทางในการประยุกต์ได้ แต่ต้องบอกก่อนว่าเนื้อหาในเรื่อง codeigniter จะเป็น
แนวทารประยุกต์ ทุกส่วนจะสัมพันธ์กันมาแต่ต้น
การแบ่งหน้าข้อมูลด้วย pagination class
ก่อนอื่นเราต้องโหลด pagination class
ให้เปิดไฟล์ Service_model.php ในโฟลเดอร์ apps > models > admin
โดยให้เพิ่ม
1 | $this ->load->library( 'pagination' ); |
เข้าใปในส่วนของฟังก์ชั่น __contruct()
เป็นดังนี้
1 2 3 4 5 6 7 8 9 | 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 ที่
1 2 3 4 5 | รูปแบบเดิมคือ แยกวิเคราะห์ตามรูปแบบโครงสร้างการกำหนด URI http://localhost/learnci/ชื่อ class/ชื่อ function/parameter ตัวที่ 1/ |
ตอนนี้ในส่วนของ parameter ของระบบ service เรามีสูงสุดที่สามตัว ตัวอย่าง
1 2 3 4 5 6 7 | มาจาก ตัดมาเฉพาะ parameter จะประกอบด้วย - service - edit - 2 |
หากอ้างอิงจากไฟล์ Admin.php ในโฟลเดอร์ apps > controllers >
1 2 3 4 | 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 ตัว
จากรูปแบบ
1 | $route [ 'admin/(:any)/(:any)/(:num)' ] = 'admin/index/$1/$2/$3' ; |
จากรูปแบบ
1 2 3 | admin / อะไรก็ได้ / อะไรก็ได้ / ตัวเลข ก็จะได้เป็น admin/service/edit/2 |
ดังนั้นเมื่อพิจารณาตามความเข้าใจข้างต้นแล้ว
1 2 3 4 5 | หน้าแรกของระบบ service คือ จะมี parameter 2 ตัวคือ service และ ค่าว่างด้านหลัง (ก็คืออไรก็ได้) ค่าตัวที่สองก็คือตัวแปร $action แต่มีค่า null |
///////////////////////////////////// จบส่วยของการอธิบายที่มาที่ไปความเดิม
ทีนี้เรามาดูที่โค้ดไฟล์ admin_service.php ในส่วนของ $action เท่ากับ null
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <?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 ของหน้านี้
และเราจะให้มีรูปแบบเป็น
page คือค่าจากตัวแปร $action
1 คือค่าจากตัวแปร $id (ไว้ใช้เป็นหน้าเพจ ข้อมูล)
ดังนั้นให้เพิ่มในส่วนของ $action เข้าไปดังนี้
1 | <?php if ( $action ==null || $action == 'page' ){?> |
ซึ่งหมายถึง ถ้า $action เป็นค่าว่าง หรือ มีค่าเท่ากับ page ก็ให้แสดงส่วนนี้
จึงทำให้
1 2 | http://localhost/learnci/admin/service/page/ กลายเป็นหน้าเดียวกัน |
ต่อไปในส่วนของ ฟังก์ชั่นในการดึงข้อมูล จากเดิมเราไม่มีการแบ่งหน้า จึงไม่มีการส่งค่า
เข้าไปในฟังก์ชั่น แต่กรณีนี้ เราจะส่งหน้าเพจข้อมูลเข้าไปในฟังก์ชั่น getlist();
จึงกำหนดเพิ่มเข้าไปเป็นดังนี้
1 | $result = $this ->service_model->getlist( $id ); |
ต่อมาหากเรามีลำดับรายการของข้อมูล ตามโค้ดคือตัวแปร $i_num
ก็ให้กำหนดค่าใหม่จากเดิมคือ ตรวจสอบ $id
1 2 3 | if (!isset( $id )){ $id =1; // ถ้าไม่มีเลขหน้า ให้มีค่าเข้า 1 ซึ่งก็คือหน้าแรก } |
และเปลี่ยนส่วนของการเลขลำดับเป็นดังนี้
1 2 3 | <td class = "text-center" ><?= $i_num ?></td> // ก็เปลี่ยนเป็น <td class = "text-center" ><?=(( $id -1)*5)+ $i_num ?></td> |
เลข 5 คือจำนวนที่เรากำหนดให้แสดงในแต่ละหน้า ถ้าเป็นค่าอื่นก็เปลี่ยนเลข 5 เป็นเลขอื่น
เลขลำดับก็คือ เช่น ถ้าเราแบ่งที่ละ 5 เลขลำดับของหน้าสองจะต้องเริ่มต้นเท่ากับเลข 6
แบบนี้เป็นต้น
และส่วนสุดท้าย เป็นส่วนของการเรียกใช้งาน แสดงเลขแบ่งหน้า ให้ใช้เป็นดังนี้
1 2 3 | <?php echo $this ->pagination->create_links(); ?> |
โดยแทรกไว้ด้านล่างสุด
เราจะได้ส่วนของการแสดงข้อมูลแบบแบ่งหน้า ดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <?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();
โค้ดฟ้งก์ชั่นเดิมคือ
1 2 3 4 | public function getlist(){ $query = $this ->db->get( 'tbl_service' ); return $query ->result_array(); } |
เป็นการดึงข้อมูลจากตาราง tbl_service ทั้งหมดแล้วก็ส่งค่ากลับไปแสดง
แต่เนื่องจากรูปแบบใหม่มีการแบ่งหน้า และมีการรับค่า $id เข้ามาด้วยจึงได้เป็
รูปแบบจึงเป็นดังนี้
1 2 3 4 | 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 หรือหน้าเพจที่ส่งเข้ามา เพื่อระบุตำแหน่ง
เริ่มต้นของข้อมูลที่ต้องการดึง โดยกำหนดเป็นตัวแปรเพิ่มเดิมดังนี้
1 2 3 4 5 | 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 ก็คือส่วนของการตั้งค่าต่างๆ
ขออธิบายในโค้ดดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | $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){ ทั้งหมดเป็นดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?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 เราก็คงเฉพาะส่วนที่
ต้องการปรับค่าหรือ ส่วนที่ต้องการใช้ข้อมูลไว้ จะได้เป็น
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 ทั้งหมดในตอนนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | <?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 )); // คืนค่าผลการคิวรี่ } } |
สำหรับเนื้อหาตอนหน้าจะเป็นอะไร รอติดตาม
*คำแนะนำ เนื่องจากเนื้อหามีความต่อเนื่อง เพื่อความเข้าใจแต่ต้น
ควรศึกจากตั้งแต่ตอนแรกๆ เพื่อให้เกิดความเข้าใจง่าย