พัฒนาระบบเป็นของตัวเอง เป็นเรื่องดีเสมอครับ
เพราะมันจะแสดงให้เห็นถึงความรู้ ความเข้าใจ และขีดความสามารถของคุณเกี่ยวกับระบบที่คุณกำลังพัฒนา
*********************************************
ความจริงคุณก็เข้าใกล้ความสำเร็จนั้นแล้ว ผมดูจาก ในโพสท์ที่คุณถามคำถามนี้นะ
http://www.thaiseoboard.com/index.php/topic,411740.0.html เพียงแต่คุณยังเข้าใจรายละเอียดเกี่ยวกับไฟล์ต่างๆ ทั้ง index.php และ Pagination.class.php ไม่มากพอ
ซึ่งผมขออธิบายบางประเด็นไว้ในโพสท์นี้ก็แล้วกัน หากมีประเด็นไหนที่คุณเข้าใจอยู่แล้ว อย่าตำหนิผม นะครับ
(ขออภัยท่านอื่นๆ ที่ไม่ไปตอบในโพสท์นั้น มา ณ ที่นี้ด้วยครับ )
**********************************************
ในไฟล์ index.php
1. $records = 200;
ตรงนี้ คือ จำนวนเร็คคอร์ดทั้งหมด ที่ได้มาจากคำสั่ง sql "SELECT * FROM member ORDER BY id DESC"
2. $current = $_REQUEST['p'] ? $_REQUEST['p'] : 1;
การรับต่า $_REQUEST['p'] ซึ่งจะทำให้เรารู้ว่า ตัวแปร $current คือ หน้าที่เท่าไหร่
โดยค่า $_REQUEST['p'] ก็มาจาก index.php?p=x โดย x ก็คือเลขหน้า
ความแตกต่าง ของ $_POST, $_GET, $_REQUEST What's the difference?
อ่านจากนี่นะครับ
https://stackoverflow.com/ques...t-request-whats-the-difference (โดยส่วนตัว ผมไม่ใช้ $_REQUEST เพราะต้องการตรวจสอบให้มันแน่นอน ชัดเจน ว่า มาจาก $_POST หรือ $_GET)
3. $perpage
ก็คือ จำนวนเร็คคอร์ดที่ต้องการแสดงผลใน 1 หน้า
4. $pager = new Pagination($link, $records, $current, $perpage);
ตรงนี้คือ การนำเอาตัวแปรต่างๆ คือ $link, $records, $current, $perpage ไปเข้าระบบจัดการของไฟล์ Pagination.class.php
ซึ่งแบ่งย่อย ให้ฟังชั่นต่างๆ ทำหน้าที่ของตัวเอง เช่น
function __construct($link, $records, $curPage, $perPage) ทำหน้าที่กำหนดค่าตัวแปรสำหรับใช้ภายในไฟล์นี้
function render() ทำหน้าที่แสดงผล โดยมีการเรียกใช้ function compilePagination อีกที เพื่อจัดรูปแบบ
แต่ตัวฟังชั่นนี้เอง ทำหน้าที่เพียงแค่เช็คว่า ถ้า if(!$html = self::compilePagination()) ให้แสดง Error
ถ้าไม่ Error ก็ให้แสดงผล จากฟังชั่น compilePagination
*******************************************************************
ที่นี้ กลับมาพิจารณา
$records = 200; ในที่นี้ คุณใส่เอาไว้เพื่อทดสอบ แต่นำไปใช้จริงไม่ได้
ถ้าจะให้ใช้งานได้จริง เราต้องเขียนคำสั่ง เพื่อหาผลลัพภ์ว่า จริงๆแล้วมันมีเท่าไหร่กันแน่
วิธีง่ายๆก็คือ
$result= mysqli_query($mysqli, "SELECT id FROM member ORDER BY id DESC) ;
$records = mysqli_num_rows($result);
แล้วนำค่า $records ไปแทนที่ 200
แต่ผมไม่แนะนำ เพราะ SELECT * FROM member คือการค้นหาเร็คคอร์ดทั้งหมดในฐานข้อมูล
ณ วันแรกๆ คุณอาจมีแค่ 200 เร็คคอร์ด แต่ลองคิดดู ถ้าคุณเพิ่มวันละ 20 คุณ 365 วัน. พอครบ 1 ปี คุณจะมี 7300
แล้วลองคูณจำนวนปี ไปเรื่อยๆ และลองเพิ่มจาก 20 ต่อวัน เป็น 200 ต่อวันดู
นี่จึงไม่ใช่เรื่องแปลก ที่ระบบจะเริ่มอืดเมื่อใช้ไปนานๆ เพราะมันมีข้อมูลจำนวนมากที่ถูกนำมาคำนวน
วิธีที่ดีก็คือ $result = mysqli_query($mysqli, "SELECT id FROM member) ..... WHERE หรืออะไรอย่างอื่นก็แล้วแต่เพิ่มนะครับ
ผมเน้นตรง SELECT id โดย id ที่เราจะค้นนี้ ความจริงก็คือ ชื่อ ตอลัมน์ที่เป็น index หรือ primary key
มันจะจะช่วยลด การทำงานของระบบไปได้เยอะมาก เพราะมันจะค้นเพียงคอลมัน์เดียว และเป็นคอลัมน์ที่ได้มีการทำ index ไว้แล้ว
ต่างจาก SELECT * FROM member ที่มันจะค้นทุกคอลัมน์ ซึ่งเป็นการทำงานหนักเกินจำเป็นครับ
******************************************************************
จะเห็นได้ว่า เพียงแค่ คุณแทนค่า
$records = 200; ด้วย
$result= mysqli_query($mysqli, "SELECT id FROM member ORDER BY id DESC") ;
$records = mysqli_num_rows($result);
//เพิ่มส่วนนี้นะครับ เพื่อแก้ไข ส่วนอธิบายไม่ครบ
1.
ลบส่วนที่ไม่จำเป็นออก คือ
for ($i = ((($current-1)*$perpage)+1); $i <= $current*$perpage; $i++) {
$data[$i] = $i * 1001;
}
2.
ในส่วนการแสดงผล ของเดิมคือ ตั้งแค่ while($res = mysqli_fetch_array($result)) ไปจนจบ while
คุณต้องแก้ไขด้วยการ เพิ่มคำสั่ง sql สำหรับการแสดงเนื้อหาคือ
ของเดิมคือ
//print_r($data);
echo "<table><tr><td>id</td><td>topic</td></tr>";
while($res = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>".$res['id']."</td>";
echo "<td>".$res['topic']."</td>";
echo "</tr>";
}
แก้เป็น
if((isset($current))&&($current>1)){
$start=$perpage*($current-1);
}
else{
$current=1;
$start=0;
}
$result2 = mysqli_query($mysqli, "SELECT id,topic FROM member ORDER BY id DESC LIMIT $start,$perpage") ;
echo "<table><tr><td>id</td><td>topic</td></tr>";
while($res = mysqli_fetch_array($result2)) {
echo "<tr>";
echo "<td>".$res['id']."</td>";
echo "<td>".$res['topic']."</td>";
echo "</tr>";
}
echo "</table>";
//จบส่วนที่เพิ่งเพิ่มเติมครับ
มันก็จะใช้งานจากตารางได้จริงแล้ว
คุณเข้าใกล้มันเพียงแค่มือเอื้อมจริงๆเลยนะครับ
ส่วนการใช้งาน jQuery DataTable ผมขอแนะนำให้ download code จากลิ้งค์
https://codersfolder.com/2016/...trap-datatables-jquery-plugin/ มาลองปรับเปลี่ยนดูนะครับ จะเป็นจุดเริ่มต้นที่ดี
(ขอย้ำว่าเป็นจุดเริ่มต้นนะครับ)
หวังว่าจะเป็นประโยชน์นะครับ