Data sources สำหรับ DataTable ในการใช้งานร่วมกับ Codeigniter ตอนที่ 2

เขียนเมื่อ 6 ปีก่อน โดย Ninenik Narkdee
codeigniter 3 codeigniter data source datatable

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ codeigniter 3 codeigniter data source datatable

ดูแล้ว 8,920 ครั้ง


ในตอนที่ผ่านมา เราได้รู้จักวิธีการใช้งานเบื้องต้นของ DataTable กันไปแล้ว ทบทวนได้ที่บทความ 
แนวทางการใช้งาน DataTable ร่วมกับ Codeigniter ตอนที่ 1 
 
สำหรับเนื้อหาในตอนต่อไปนี้ เราจะมาเพิ่มเติมในส่วนของ Data sources หรือแหล่งข้อมูลที่จะนำมาใช้งาน
สำหรับแสดงใน DataTable กัน โดยจะประกอบไปด้วย
 
- ใช้ข้อมูลจาก HTML (DOM) data
- ใช้ข้อมูลจาก Ajax data
- ใช้ข้อมูลจาก Javascript data
- ใช้ข้อมูลจาก Server-side processing
 

การใช้ข้อมูลจาก HTML (DOM) data 

    ข้อมูลแบบ HTML (DOM) จะเป็นลักษณะเหมือนตัวอย่างของบทความในตอนแรก คือใช้ข้อมูลจากตาราง
ที่เราสร้างขึ้น ซึ่งก็คือแท็ก HTML ที่เป็นข้อมูลตารางที่แสดงปกติ โดยตัว DataTable plugin จะเข้าไปอ่านข้อมูล
โดยตรงจาก DOM หรือโครงสร้างแท็ก HTML แล้วใช้ข้อมูลนั้นมาจัดรูปแบบและสดงผลใหม่ เพิ่มการค้นหา การเรียง
ข้อมูล การแบ่งหน้า เข้าไป
 

การใช้ข้อมูลจาก Ajax data

    ข้อมูลแบบ Ajax data จะเป็นลักษณะไปอ่านข้อมูลจากไฟล์ที่เป็นข้อความ text ที่มีรูปแบบ JSON string data
อาจจะเป็นไฟล์นามสกุล txt หรือ json หรือไฟล์ที่สร้าง Server script แล้วส่งค่ากลับมาเป็น JSON data ก็ได้
การทำงานก็คือไปอ่านข้อมูลจากไฟล์นั้นครั้งแรกครั้งเดียว แล้วนำค่ามาทำการสร้างรูปแบบข้อมูลใหม่ แล้วแสดงใน
ตารางข้อมูล DataTable เหมาะกับข้อมูลที่มีจำนวนไม่มาก เช่นเดียวกับวิธีใช้ข้อมูลจาก HTML (DOM) แต่ข้อดีที่
แตกต่างจากวิธีแรกก็คือ มีการโหลดข้อมูลเร็วขึ้น เพราะไม่ทำให้การโหลดหน้าเพจในครั้งแรกหนักเหมือนกับวิธีแรก 
ที่มีการสร้าง HTML แท็กของตารางขึ้นมา อีกทั้งวิธีแรก ถ้าข้อมีมากจำนวนหนึ่ง จะสังเกตเห็นว่าก่อนการจัดรูปแบบ
มีการแสดงตารางข้อมูลก่อนปรับรูปแบบชั่วขณะหนึ่ง ทำให้การจัดรูปแบบด้วย DataTable ดูไม่ค่อยเรียบร้อยสวยงาม
เท่าวิธีการใช้งานด้วย ajax
    เรามาลองสร้างการใช้ข้อมูลจาก Ajax data ใน Codeigniter อย่างง่ายกันดู โดยใช้ข้อมูลจากตาราง tbl_provinces
สร้างชุดข้อมูล Ajax อย่างง่าย
 
    โดยเราจะสร้างข้อมูล Ajax ให้อยู่ในรูปแบบ JSON data ดังนี้
 
{
  "data": [
    ["1",''กรุงเทพมหานคร","Bangkok"],
    ["2",''สมุทรปราการ","Samut Prakan"],
    ["3",''นนทบุรี","Nonthaburi"]
  ]
}
 
ตัวอย่างบางส่วนของข้อมูลที่เราต้องการ
 
    ให้สร้างไฟล์ชื่อ Ajaxdata.php ไว้ในโฟลเดอร์ apps > controllers 
กำหนดโค้ดให้มีรูปแบบดังนี้
 
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
 
class Ajaxdata extends CI_Controller {
 
    public function __construct()
    {
        parent::__construct();
    }
    public function index(){

		$data = array();
		$query = $this->db->query("SELECT * FROM tbl_provinces");
		foreach ($query->result_array() as $row){
			$data[] = array(
				$row['province_id'],
				$row['province_name'],
				$row['province_name_eng']
			);
		}
		$output = array(
			 "data" => $data
		);
		echo json_encode($output);
		exit();
    }
}
 
ทดสอบเรียกดูข้อมูลผานบราวเซอร์ จะได้ผลลัพธ์ประมาณรูปด้านล่าง สังเกตว่า ภาษาไทยจะถูกเข้ารหัส
เพื่อป้องกันกรณีมีอักขระแปลกๆ ไปกระทบการทำงานของ javascript โดยข้อมูลที่เข้ารหัสนี้สามารถนำไปใช้งาน
ใน javascirpt ได้เลย เวลาถูกเรียกใช้ ก็จะแปลงเป็นภาษาไทยให้อัตโนมัติ
 
 

 
 
ต่อไปมาดูโค้ดการเรียกใช้งาน DataTable จากข้อมูล Ajax data แบบเต็มกันดู ในตัวอย่างทดสอบเราจะทำ
ไว้ในหน้า home เหมือนตัวอย่างของบทความตอนแรก
 
<link rel="stylesheet" href="//cdn.datatables.net/1.10.15/css/jquery.dataTables.min.css">  
<script src="//cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script>       
 
<table id="table_ajax_id" class="display">
    <thead>
        <tr>
            <th>Province ID</th>
            <th>Province Name TH</th>
            <th>Province Name ENG</th>
        </tr>
    </thead>
</table>
 
<script type="text/javascript">
$(function(){
	$('#table_ajax_id').DataTable( {
		"ajax": '<?=base_url("Ajaxdata")?>'
	} );
});
</script>
 
ในการเรียกใช้งานข้อมูลจาก Ajax data เราจะใช้ ajax option โดยกำหนด path หรือ url
ของข้อมูล Ajax ที่เราต้องการใช้งาน
 
ผลลัพธ์ที่ได้จะเป็นรูปด้านล่างต่อไปนี้
 
 

 
 
สังเกตจากรูป จะเห็นว่า ผลที่ได้จะเหมือนกับวิธีการแรกที่ใช้ข้อมูลจาก HTML แต่การทำงานจะลื่นใหล
และทำงานได้เร็วกว่ากรณีแรก ดูในส่วนของ console จะพบว่า มีการไปเรียกข้อมูลผ่าน ajax โดยจะโหลด
ข้อมูลครั้งแรกแค่ครั้งเดียว อีกอย่าง ให้ดูส่วนของการกำหนดแท็ก HTML ตาราง <table> เบี้องต้นก็จะดู
โล่งขึ้น เพราะส่วนของข้อมูลนั้น จะไม่ได้แสดงแต่แรก แต่จะถูกสร้างและนำมาแสดงเมื่อโหลดข้อมูล ajax
มาเรียบร้อยแล้วนั่นเอง
 
 

การใช้ข้อมูลจาก Javascript data

    ในบางกรณี เราต้องการใช้ข้อมูลจากตัวแปร javascript ที่เป็นชุดข้อมูล array มาแสดงใน DataTable 
แทนการใช้ข้อมูลจากไฟล์ ลองมาดูรูปแบบการใช้งานกันกับตัวอย่างด้านล่าง
 
<link rel="stylesheet" href="//cdn.datatables.net/1.10.15/css/jquery.dataTables.min.css">  
<script src="//cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script>

<table id="table_js_id" class="display" width="100%"></table>
 <br>
<br>
<script type="text/javascript">
var dataSet = [
	[1,"วันจันทร์","Monday"],
	[2,"วันอังคาร","Tuesday"],
	[3,"วันพุธ","Wednesday"],
	[4,"วันพฤหัสบดี","Thursday"],
	[5,"วันศุกร์","Friday"],
	[6,"วันเสาร์","Saturday"],
	[7,"วันอาทิตย์","Sunday"]
];
$(function(){
	$('#table_js_id').DataTable( {
		"data": dataSet,
		"columns": [
			{ title: "Name" },
			{ title: "Name TH" },
			{ title: "Name ENG" }
        ]
	} );
});
</script>
 
จะเห็นว่าแท็ก <table> เบี้องต้นเรากำหนดค่า id ไว้อ้างอิง แต่เราไม่ต้องกำหนด <thead> หรือ
หัวข้อของข้อมูลในตาราง สำหรับข้อมูลที่ใช้แสดงนั้น เราใช้ข้อมูลจากตัวแปร dataSet ซึ่งเป็นตัวแปรข้อมูล
Javascript โดยใช้ผ่าน data option ส่วนหัวข้อคอลัมน์ เรากำหนดโดยใช้ผ่าน columns option 
โดยวางรูปแบบหัวข้อคอลัมน์ไว้ใน title อีกทีตามโค้ดด้านบน
 
ผลลัพธ์ของตัวอย่างข้อมูลข้างต้น จะเป็นดังนี้
 
 

 
 
 

การใช้ข้อมูลจาก Server-side processing

    สำหรับการใช้ข้อมูลจาก Server-side processing นั้นจะคล้ายๆ กับการใช้งาน ajax แต่ไม่เหมือนกัน
เลยซะทีเดียว โดยข้อมูลจาก Server-side processing จะเหมาะกับการใช้งานกับฐานข้อมูลที่มีปริมาณมากๆ
การจัดการข้อมูลไม่ว่าจะเป็นการเรียงข้อมูล การค้นหาข้อมูล การกำหนดการแสดงข้อมูลในแต่ละหน้า ล้วนจำเป็น
ต้องมีการจัดการผ่านไฟล์ Server script ที่ต้องกำหนดให้สอดคล้องกับการแสดงผล โดยการใช้งานข้อมูลจาก
Server-side processing นั้น จะมีการส่ง Ajax request ไปดึงข้อมูลใหม่ทุกๆ ครั้งที่มีการเปลี่ยนแปลงใน DataTable
ซึ่งต่างจากกรณี Ajax data ที่ดึงข้อมูลคร้้งแรกครั้งเดียว เหตุผลก็เพราะข้อมูลที่มีขนาดใหญ่นั้นเอง 
    สำหรับเนื้อหาและตัวอย่างเกี่ยวกับการใช้ข้อมูลจาก Server-side processing ใน Codeigniter ร่วมกับ DataTable
นั้นจะขออธิบายเพิ่มเติม พร้อมตัวอย่างในบทความถัดไป รอติดตาม


 


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



อ่านต่อที่บทความ









เนื้อหาที่เกี่ยวข้อง









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





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ