Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,036

HOME > PHP > PHP Forum > แจก PHP Pagination Class โค้ดแบ่งหน้าที่กำหนดการแสดงผลได้ละเอียดมากตามที่คุณต้องการ



 

แจก PHP Pagination Class โค้ดแบ่งหน้าที่กำหนดการแสดงผลได้ละเอียดมากตามที่คุณต้องการ

 



Topic : 122621



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์




Pagination class ของผมตัวนี้สามารถกำหนดให้แสดงการแบ่งหน้าได้ละเอียดมาก เอาเท่าที่ทดสอบแล้วพอจะได้รูปแบบดังนี้

PHP Pagination Class


First Previous 1 2 ... 4 5 6 7 8 9 10 ... 13 14 Next Last
First Previous 1 ... 4 5 6 7 8 9 10 ... 12 13 14 Next Last
First Previous 4 5 6 7 8 9 10 ... 13 14 Next Last
First Previous 4 5 6 7 8 9 10 Next Last
Previous 4 5 6 7 8 9 10 Next
4 5 6 7 8 9 10
First Previous Next Last
Previous Next


นอกจากนี้ยังสามารถสั่งให้สร้างข้อมูลเพื่อเอาข้อมูลไปสร้างการแสดงผล html เอาเองแบบอื่นๆที่สุดจะแตกต่างไปมากกว่านี้ได้อีก เช่น แบบ select box, method POST, ajax, ฯลฯ

Download

หมายเหตุ รุ่นที่ปล่อยให้ดาวน์โหลดนี้แม้จะทำงานได้จริงๆ แต่ยังไม่ใช่รุ่นเต็ม (ผมยังไม่ได้กำหนดรุ่นเต็ม) ต้องการให้ได้ทดลองใช้กัน แล้วมาบอกกันหน่อยครับว่าต้องการให้กำหนดการแสดงผลออกมาเป็นอย่างไรได้อีก. และเมื่อลงตัวแล้วก็จะค่อยกำหนดรุ่นเต็มอีกทีหนึ่ง.
Download ผ่าน Github, ติดตั้งผ่าน Composer

การใช้งาน

ก่อนจะยกตัวอย่างการใช้งาน เพื่อความเต็มเหนี่ยว ขอให้ดูเพิ่มเติมได้จากเอกสาร API นะครับมันจะมีบอกไว้หมดเลยว่า property อะไรกำหนดเพื่ออะไรบ้าง และ method อะไรเรียกใช้เพื่ออะไร ซึ่ง method ที่เรียกใช้ได้จากภายนอกก็มีแค่ 2 เท่านั้นแหละครับ.
แต่ทั้งนี้กระผมก็ไม่เก่งอังกฤษ อยากจะช่วยแก้คำผิดในเอกสาร API ตรงไหนก็บอกได้เหมือนกันนะครับ.

การใช้งานแบบเดิมๆ สั้นๆ ง่ายๆเลย

Code (PHP)
// ถ้าติดตั้งจาก Composer ก็ใช้ autoload เอานะครับ ไม่ต้องมา include/require ตรงนี้
// ส่วนผู้ที่โหลดทำมือเอาเองก็เช็คพาธให้ถูกต้องนะครับ.
require 'Rundiz/Pagination/Pagination.php';

// เชื่อมต่อฐานข้อมูล
mysqli_report(MYSQLI_REPORT_STRICT);
try {
    $mysql = new \mysqli($db['host'], $db['username'], $db['password'], $db['dbname'], $db['port']);
} catch (\Exception $e) {
    echo 'MySQL connect error ('.$e->getCode().') '.$e->getMessage().'<br>'."\n";
    echo 'Please make sure that you had already configure database settings in this file. '.__FILE__."\n";
    exit;
}
$mysql->set_charset('utf8');

// query หาค่าทั้งหมดก่อน อย่าเพิ่ง LIMIT, OFFSET, แบ่งหน้าอะไรตรงนี้
// ถ้ามีการ filter หรือเงื่อนไข เช่น พวก where อะไรก็ทำตรงนี้ได้เลยครับ
$sql = 'SELECT * FROM `'.$db['tablename'].'`';
$result = $mysql->query($sql);
if ($result === false) {
    printf("Error: %s\n", $mysql->error);
    exit;
}

$total_records = $result->num_rows;// กำหนดค่ารายการ *ทั้งหมด* ที่พบใน sql ตามเงื่อนไข
$start = (isset($_GET['start']) ? intval($_GET['start']) : 0);
if ($start < 0) {
    $start = 0;
}
$limit = 10;// แสดงหน้าละ 10 รายการ
$offset = $start;

// query อีกครั้ง คราวนี้ให้กำหนด LIMIT, OFFSET ได้
$result->free();
$sql .= ' LIMIT '.$limit.' OFFSET '.$offset;
$result = $mysql->query($sql);
if ($result === false) {
    printf("Error: %s\n", $mysql->error);
    exit;
}
unset($sql);

// เสร็จส่วนของ mysql แล้ว ปิดไปเลย ประหยัดแรมครับ
$mysql->close();
unset($mysql);

// กำหนด base_url สำหรับใช้ในการสร้างลิ้งค์แบ่งหน้า
// ส่วนนี้กับงานจริงๆของคุณต้องดูรายละเอียดอีกทีนะครับ
$base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?start=%PAGENUMBER%';
// รับค่า query string หรือ method GET อื่นๆมาใช้นอกจาก ?start= 
// เช่นกรณีที่คุณแสดงรายการแล้วมีฟอร์มให้ filter ได้ก็ไม่ควรให้ผู้ใช้มานั่ง filter ใหม่ทั้งหมด ก็ทำตรงนี้ไป หรือไม่เอา ก็ลบส่วนนี้ออก
$query_string_array = array();
if (isset($_GET) && is_array($_GET)) {
    foreach ($_GET as $key => $value) {
        if ($key != 'start') {
            $query_string_array[$key] = $value;
        }
    }// endforeach;
    unset($key, $value);
}
if (!empty($query_string_array)) {
    $base_url .= '&amp;' . http_build_query($query_string_array, null, '&amp;');
}
unset($query_string_array);

// เริ่มเรียกใช้ class Pagination.
$Pagination = new \Rundiz\Pagination\Pagination();
// กำหนดค่าต่างๆให้ class ด้านล่างนี้เลย รวมถึงการแสดงผลด้วย (ขอให้ดูเพิ่มเติมจากหน้าเอกสาร API)
$Pagination->base_url = $base_url;// *ค่า property นี้ต้องกรอก.
$Pagination->total_records = $total_records;// *ค่า property นี้ต้องกรอก.
$Pagination->page_number_value = $start;// *ค่า property นี้ต้องกรอก.
?>
<!-- สมมุติว่าเรามีหน้า html ทั้งหน้าแล้ว อันนี้เป็นแค่ส่วนแสดงผลตรงตาราง ผมจึงขอแสดงตัวอย่างแค่นี้นะครับ -->
<table class="table">
    <thead>
        <tr>
            <th style="width: 10%;">ID</th>
            <th>Name</th>
            <th>Gender</th>
            <th>Email</th>
            <th>IP Address</th>
        </tr>
    </thead>
    <tfoot>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Gender</th>
            <th>Email</th>
            <th>IP Address</th>
        </tr>
    </tfoot>
    <tbody>
        <?php
        while ($item = $result->fetch_assoc()) {
        ?> 
        <tr>
            <td><?php echo $item['id']; ?></td>
            <td><?php echo $item['first_name'].' '.$item['last_name']; ?></td>
            <td><?php echo $item['gender']; ?></td>
            <td><?php echo $item['email']; ?></td>
            <td><?php echo $item['ip_address']; ?></td>
        </tr>
        <?php
        } // endwhile;
        $result->free();
        unset($item, $result);
        ?> 
    </tbody>
</table>
<?php
// เรียกแสดงการแบ่งหน้าได้เลย
echo $Pagination->createLinks();
?>


ในส่วนของการเรียกแสดงการแบ่งหน้ายังกำหนดค่าใน method createLinks ได้อีก
โดยจะมีค่าแทนตำแหน่งต่างๆดังต่อไปนี้ :current_page_number_displaying จะแทนที่หน้าที่กำลังแสดง, :total_pages จะแทนที่หน้าทั้งหมดที่มี, :pagination จะแทนที่การแบ่งหน้า
ตัวอย่าง
Code (PHP)
echo $Pagination->createLinks('Displaying :current_page_number_displaying/:total_pages<br>:pagination');


การแสดงผลแบบกำหนดเอง
นอกจากการกำหนดค่าที่มีให้แล้ว คุณยังสามารถกำหนดให้มันแตกต่างออกไปได้อีกแทบจะไม่มีขีดจำกัด คือให้เรียกใช้ method getPaginationData() เพื่อรับเอาค่าของมันมาแล้วเอามาวนลูปเขียนการแสดงผลใหม่ได้ เช่นการแสดงผลแบบ select box, method POST, ajax, ฯลฯ

ตัวอย่าง
Code (PHP)
$pagination_data = $Pagination->getPaginationData();
if (is_array($pagination_data) && array_key_exists('generated_pages', $pagination_data)) {
    echo '<form id="pagination-method-post-form" method="post" action="'.str_replace(array('start=%PAGENUMBER%&amp;', 'start=%PAGENUMBER%'), '', $base_url).'">'."\n";
    echo '<input type="hidden" id="method-post-start-value" name="start" value="">'."\n";
    foreach ($pagination_data['generated_pages'] as $page_key => $page_item) {
        if (!is_string($page_key) && is_array($page_item)) {
            if (array_key_exists('link', $page_item) && array_key_exists('page_value', $page_item) && array_key_exists('text', $page_item)) {
                echo '<button type="button" class="button btn';
                if (isset($start) && $start == $page_item['page_value']) {
                    echo ' btn-primary';
                } else {
                    echo ' btn-default';
                }
                echo '"';
                echo ' name="start"';
                echo ' value="'.$page_item['page_value'].'"';
                echo '>';
                echo $page_item['text'];
                echo '</button> '."\n";
            }
        }
    }// endforeach;
    unset($page_item, $page_key);
    echo '</form>'."\n";
}
unset($pagination_data);



ใครที่อยากได้การแสดงผลที่แตกต่างออกไปยังไง ลองบอกมาครับ ผมจะช่วยดูให้ หรือดูคำอธิบายเพิ่มเติมในเว็บได้ที่ http://rundiz.com/web-resources/pagination-v3
หากรูปแบบการแบ่งหน้าแบบไหนๆที่ยังทำไม่ได้ใน class นี้และพิจารณาแล้วสามารถเพิ่มได้ จะลองเพิ่มเติมให้ครับ.



Tag : PHP









ประวัติการแก้ไข
2016-04-26 15:42:49
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2016-04-26 15:41:46 By : mr.v View : 6597 Reply : 8
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

เยี่ยมเลยครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-04-27 09:17:01 By : mr.win
 


 

No. 2



โพสกระทู้ ( 5,105 )
บทความ ( 4 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์


ชื่นชมครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-04-27 09:39:49 By : apisitp
 

 

No. 3



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


แจ่มครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-04-27 11:04:26 By : Chaidhanan
 


 

No. 4



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


ไม่มีใครมีไอเดียหรืออยากได้การแสดงผลแบ่งหน้าแบบอื่นๆที่แตกต่างจากนี้เลยเหรอครับ อยากจะให้มันสนองนี้ดทำออกมาได้ทุกรูปแบบไรงี้.
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-04-27 13:13:02 By : mr.v
 


 

No. 5



โพสกระทู้ ( 752 )
บทความ ( 3 )



สถานะออฟไลน์
Blogger

จขกท. โปรเจ็ตคเยอะมากเลยครับ ;)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-04-27 13:36:38 By : ALTELMA
 


 

No. 6



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

เดียวแชร์ลง Face ให้ครับ รอคิว....
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-04-27 13:46:02 By : mr.win
 


 

No. 7



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 5 เขียนโดย : ALTELMA เมื่อวันที่ 2016-04-27 13:36:38
รายละเอียดของการตอบ ::
ที่เห็นเยอะๆนั่น ดูดีๆนะครับ หลายตัวหยุดไปแล้ว (This project is no longer maintained.) แบบว่าขี้เกียจและมันเก่าแล้วเลยหยุด แต่แชร์ไว้เฉยๆ
ยังมีอีกบางส่วนนะครับที่จะทะยอยปลดระวาง อย่างเช่นโปรเจ็คใน organize ของ AgniCMS
ใครสนใจอยากได้ไปจัดการโปรเจ็คเพื่อพัฒนาต่อก็บอกมาละกันครับ ถ้าจะเอาไปใช้เฉยๆก็แค่โหลดไปได้เลย

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-04-27 18:49:09 By : mr.v
 


 

No. 8



โพสกระทู้ ( 25 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณจ้า
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-04-28 18:00:51 By : yingthecob
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : แจก PHP Pagination Class โค้ดแบ่งหน้าที่กำหนดการแสดงผลได้ละเอียดมากตามที่คุณต้องการ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่