การสร้าง pagination(แบ่งหน้า)แสดงตารางข้อมูล

PHP Knowledge เป็น บอร์ดรวามความรู้ php เน้นบทความ แนวทางการเขียนโปรแกรม บันทึกกันลืม เพื่อให้สมาชิกได้เขียนความรู้ที่ตัวเองมีให้สมาชิกท่านอื่นๆ ได้ เข้ามาอ่าน และ ไว้อ่านเองกันลืมด้วย

Moderator: mindphp, ผู้ดูแลกระดาน

abdkode
PHP Super Member
PHP Super Member
โพสต์: 362
ลงทะเบียนเมื่อ: 07/01/2019 9:56 am

การสร้าง pagination(แบ่งหน้า)แสดงตารางข้อมูล

โพสต์โดย abdkode » 15/02/2019 2:33 pm

ใน php มีวิธีการสร้าง ตารางวแสดงข้อมูลในรูปแบบแบ่งหน้าได้ ซึ่งเราสามารถกำหนดได้ว่าจะแบ่งกี่แถวเพื่อให้แสดงแต่ละหน้าครับ
การแสดงข้อมูลแบบแบ่งนี้เรียกว่า Pagination นอกจากนั้นยังสามารถแสดงหมายเลขเพื่อให้ผู้ใช้เลือกกดเพื่อเปิดลำดับหน้าที่ต้องการได้
ในการสร้างตารางในรูปแบบนี้ เราจำเป็นต้องมีไฟล์ "Pagination.class.php"

สำหรับวิธีการทำนั้น เราต้องนำเข้าไฟล์"Pagination.class.php" ก่อน สามารถดูตัวอย่างโค้ดได้ดังนี้

โค้ด: เลือกทั้งหมด

<?php
    include 'Pagination.class.php';
    $page = 1;
    if (isset($_GET['page'])) {
        $page = $_GET['page'];
    }
    $row = 10;

    $totaldata_query="SELECT * FROM your_table";
    $resultdata=mysqli_query($conn,$totaldata_query)or die("Query failed");
    $total_data= mysqli_num_rows($resultdata);
    $total_page = ceil($total_data/$row);
    if ($page>=$total_page) {
        $page=$total_page;
    }
    if($page<=0){
        $page=1;
    }
    $start = ($page - 1) * $row;
    $Pagination = new Pagination($page, $total_data);
    $Pagination->parse();
?>

โด้ดด้านบนนี้จะเป็นการสร้างตัวแปรต่างๆที่สำคัญโดยใช้ข้อมูลจากฐานข้อมูลมาดำเนินการ เช่น
  • $page = หน้าปัจจุบัน
  • $total_data = จำนวนข้อมูลทั้งหมด
  • $total_page = จำนวนหน้าทั้งหมดเมื่อเอาข้อมูลทั้งหมดมาหารแล้ว
  • $start = จุดเริ่มต้นข้อมูล
สำหรับการสร้างตารางนั้น สามารถใช้โค้ดตัวอย่างดังนี้

โค้ด: เลือกทั้งหมด

<table class="table" style="width:100%">
    <thead>
        <!-- ส่วนของ thead -->
    </thead>
    <tbody>
    <?php
        $sql = "SELECT * FROM your_table ORDER BY id DESC LIMIT $start,$row";
        $result=mysqli_query($conn,$sql)or die("Query failed");
        if(mysqli_num_rows($result)>0){
            while($datarow=mysqli_fetch_assoc($result)){
                echo '<tr>';

                //echo table data

                echo  '</tr>';
            }
        }
        ?>
    </tbody>
</table>

และในส่วนของการแสดงลำดับหมายเลขหน้า ดังนี้

โค้ด: เลือกทั้งหมด

 
 <div class="row">
      <div class="col-md-12">
           <div class="text-center">
                <nav aria-label="Page navigation">
                    <?php
                      echo $Pagination->parse();
                      ?>
                 </nav>
           </div>
      </div>
</div>
 <p class="text-center">ทั้งหมด <?php echo $total_data;?> รายการ</p>

ผลลัพธ์จะได้ดังอย่างนี้ครับ
pagination.png
pagination.png (111.76 KiB) เปิดดู 1304 ครั้ง

การแสดงข้อมูลแบบนี้มีข้อดี เช่น โหลดข้อมูลบางส่วนเฉพาะที่จะแสดงเท่านั้น ซึ่งคล้ายกับDatatableของ javascript แต่นั้นจะโหลดข้อมูลทั้งหมดมาแล้วๆ นอกจากนั้นยังสามารถช่วยให้แสดงข้อมูลเป็นสัดส่วนไม่เยอะจนเกินไป เพื่อลดความสับสนของผู้ใช้เป็นต้น


ช่องทางการศึกษาเพิ่มเติมข่าวที่น่าสนใจเกี่ยวกับ : PHP Programming
-ศึกษาความรู้เกี่ยวกับ PHP
-ถามตอบเกี่ยวกับ PHP
-บทเรียน php พื้นฐาน
-บทเรียน PHP OOP
-บทเรียน HTML

ย้อนกลับไปยัง

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: 12 และ บุคคลทั่วไป 0 ท่าน