สวัสดีครับผม วันนี้ผมมาเขียนบล็อกเกี่ยวกับการทำเว็บอีกเรื่องครับ เป็นเรื่องเกี่ยวกับโปรเจ็คที่ผมกำลังอยู่ให้กับหน่วยงานแห่งหนึ่ง ซึ่งมีการสร้าง Report ออกมา โดยต้องการให้มีการ export ข้อมูลเป็น CSV, Excel อะไรได้ และต้องการให้มีการกรองข้อมูลจากช่วงวันที่ได้ด้วย ผมก็เลยออกแบบข้อมูลด้วยการสร้าง Date Range filter สำหรับ Datatables ครับ โดยวิธีการใช้งาน Datatables ร่วมกับ WordPress ผมเคยเขียนถึงแล้วในบทความตอนนี้นะครับ
ตัวอย่างใช้ WordPress ทำเว็บเก็บฐานข้อมูลศิษย์เก่า
และในบทความตอนนี้ผมจะมาเขียนสำหรับความต้องการเพิ่มเติมขึ้นอีกครับ โดยผมจะให้มันมีปุ่มสำหรับ Export ได้ด้วย รวมไปถึงมีการสร้างฟอร์มแสดงปุ่มเลือกวันที่ครับผม
ครั้งนี้ผมจะใช้ id สำหรับตารางเป็น example2 นะครับ
<table border="0" cellspacing="5" cellpadding="5"> <tbody> <tr> <td>Minimum Date:</td> <td><input name="min" id="min" type="text"></td> </tr> <tr> <td>Maximum Date:</td> <td><input name="max" id="max" type="text"></td> </tr> </tbody> </table>
โค้ดด้านบนเป็นตัวอย่างโค้ดที่ผมจะให้แสดงผลช่องเลือกวันที่สำหรับ filter ข้อมูลครับ เอาไปไว้ตรงไหนก็ได้ครับ ของผมผมจะเอาไว้ก่อนตารางที่แสดงข้อมูลของเรา
สำหรับชุดโค้ด HTML และการลิงค์ไฟล์ js, css ให้ดูจากเว็บของ Datatables นะครับ
จากนั้นสำหรับคำสั่ง javascript ให้ใช้ตามนี้ครับผม
jQuery(document).ready(function(){ jQuery.fn.dataTable.ext.search.push( function (settings, data, dataIndex) { var min = jQuery('#min').datepicker("getDate"); var max = jQuery('#max').datepicker("getDate"); var startDate = new Date(data[9]); if (min == null && max == null) { return true; } if (min == null && startDate <= max) { return true;} if(max == null && startDate >= min) {return true;} if (startDate <= max && startDate >= min) { return true; } return false; } ); jQuery("#min").datepicker({ onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true }); jQuery("#max").datepicker({ onSelect: function () { table.draw(); }, changeMonth: true, changeYear: true }); // DataTables initialisation var table = jQuery('#example2').DataTable( { dom: 'Bfrtip', "scrollX": true, columnDefs: [ { targets: [3, 5, 6, 8, 10 ], visible: false } ], buttons: [ { extend: 'print', text: 'Print / PDF', className: 'btn-export', exportOptions: { columns: [ 0, ':visible' ] } }, { extend: 'csvHtml5', className: 'btn-export', exportOptions: { columns: [ 0, ':visible' ] } }, { extend: 'excelHtml5', className: 'btn-export', exportOptions: { columns: ':visible' } }, { extend: 'colvis', className: 'btn-vis', text: 'Add/Hide Column', } ], } ); // Event listener to the two range filtering inputs to redraw on input jQuery('#min, #max').change(function () { table.draw(); }); });
โดยในโค้ดของผม ผมให้มันมีการเช็ควันที่ จากคอลัมน์ที่ 10 นะครับ ตรงบรรทัดนี้เลยเขียน
var startDate = new Date(data[9]);
เพราะช่องแรก เราจะเริ่มต้นด้วย 0 ครับ ช่องที่ 10 ก็เลยใส่เลขเก้า
ลองนำไปประยุกต์ใช้ดูนะครับ
สำหรับโค้ดชุดนี้ต้องขอบคุณ https://jsfiddle.net/bindrid/2bkbx2y3/6/ ที่มีการเขียนคำสั่ง javascript ไว้ให้ครับ ผมนำมาปรับแต่งต่อเพื่อให้เข้ากับเนื้องานที่ทำครับผม
หากมีคำถามเพิ่มเติมสามารถสอบถาม หรือแลกเปลี่ยนพูดคุยกันได้นะครับ แล้วเจอกันใหม่บทความตอนหน้าครับ ช่วงนี้ขอให้ทุกท่านปลอดภัยจากโรคระบาดนะครับ