Pagination v3

Pagination คือ class หรือส่วนเสริมสำหรับ PHP ที่จะใช้ในการแบ่งหน้าเมื่อต้องแสดงผลของข้อมูลจำนวนมากๆ โดยที่ไม่ต้องแสดงข้อมูลเหล่านั้นในทีเดียว แต่เอามาแบ่งหน้าแสดง

Download หรือ ติดตั้งผ่าน Composer
เอกสารอ้างอิง API

License: MIT

pagination-description

ส่วนประกอบต่างๆ

ส่วนประกอบต่างๆใน Pagination นี้ อ้างอิงจากรูปด้านบน

  • before unavailable คือเลขหน้าที่จะแสดงก่อนแสดงหน้าที่ขาดช่วงไป (unavailable). คุณสามารถกำหนดค่าจำนวนของมันได้ที่ property unavailable_before เช่น $Pagination->unavailable_before = 1;
  • unavailable คือตำแหน่งที่เลขหน้าขาดช่วงไประหว่างเลขหน้าที่แสดงก่อน และเลขหน้าที่อยู่รอบๆหน้าปัจจุบัน. คุณสามารถกำหนดค่าตัวอักษรที่จะแสดงตรงนี้ได้ที่ property unavailable_text เช่น $Pagination->unavailable_text = '..';
  • adjacent pages คือเลขหน้าที่อยู่รอบๆหน้าปัจจุบัน. คุณสามารถกำหนดค่าจำนวนของมันได้ที่ property number_adjacent_pages เช่น $Pagination->number_adjacent_pages = 3;
  • after unavailable ก็เหมือน before unavailable แต่เป็นเลขหน้าที่แสดงหลังจากหน้าที่ขาดช่วงไป (unavailable). คุณสามารถกำหนดค่าจำนวนของมันได้ที่ property unavailable_after เช่น $Pagination->unavailable_after = 3;

เมื่อทราบส่วนประกอบต่างๆแล้ว การกำหนดค่าเพื่อให้มันแสดงผลตามที่ต้องการก็จะทำได้ดั่งใจมากขึ้น. ขอได้โปรดดูค่า property ต่างๆในตารางต่อไปนี้

Property ต่างๆ

ชื่อ รายละเอียด ตัวอย่าง
base_url URL ที่จะใช้ในการสร้างลิ้งค์แบ่งหน้า. กำหนดตำแหน่งที่ค่าของเลขแบ่งหน้าจะปรากฏด้วยตัวแทนค่า %PAGENUMBER%
ตัวอย่าง 1: http://domain.tld/my-category/page/%PAGENUMBER% URL นี้ใช้ค่าของเลขแบ่งหน้าเป็นแบบ URI.
ตัวอย่าง 2: http://domain.tld/my-category?page=%PAGENUMBER% URL นี้ใช้ค่าของเลขแบ่งหน้าเป็นแบบ query string.
ตัวอย่าง 3: http://domain.tld/my-category?filter=some_filter_values&search=foobar&page=%PAGENUMBER% URL นี้ใช้ค่าของเลขแบ่งหน้าเป็นแบบ query string พร้อมด้วย query strings อื่นๆอีก, แบ่งแต่ละ query string ด้วย & ไม่ใช่ &.
ตัวอย่าง 4: http://domain.tld/my-category?start=%PAGENUMBER% URL ใช้ค่าของเลขแบ่งหน้าเป็นแบบ query string แต่ใช้ชื่อเป็น start แทนที่จะเป็น page เหมือนตัวอย่างอื่น.
$Pagination->base_url = 'http://domain.tld/my-category?page=%PAGENUMBER%
total_records จำนวนรายการทั้งหมด ก่อนที่จะทำการแบ่งแสดงผลเป็นหน้าๆ $Pagination->total_records = 1000;
items_per_page จำนวนที่จะแสดงผลต่อ 1 หน้า เช่น แสดงรายการสินค้า 10 รายการต่อหน้า $Pagination->items_per_page = 10;
page_number_type ประเภทค่าของเลขแบ่งหน้า กำหนดเป็น start_num หรือ page_num.
ถ้ากำหนดเป็น start_num จะเป็นค่าเริ่มต้นของรายการที่แสดงผลมาแล้ว เช่น (0, 10, 20, 30, 40)
ถ้ากำหนดเป็น page_num จะเป็นค่าเดียวกับตัวเลขหน้าเลย เช่น (1, 2, 3, 4) ทั้งนี้เมื่อจะนำไปใช้งานกับ MySQL จะต้องนำไปคำณวนหาค่าเริ่มต้นของรายการที่แสดงมาแล้วอีกทีหนึ่ง.
$Pagination->page_number_type = 'start_num';
page_number_value ค่าของเลขแบ่งหน้า. เนื่องจาก base_url ที่เรารองรับนั้นมันทำได้หลากหลายมากกว่าแค่ method GET หรือ query string เช่น method POST, URI segments, ajax, ดังนั้นคุณต้องรับค่านี้ด้วยตนเองแล้วกำหนดค่าที่รับมาได้ ส่งมาให้ class นี้เพื่อคำณวนการแบ่งหน้าอีกทีหนึ่ง. $Pagination->page_number_value = (isset($_GET['page']) ? intval($_GET['page']) : 0);
overall_tag_open แท็กเปิดที่เริ่มต้นคลุมทั้งหมดของการแบ่งหน้า. $Pagination->overall_tag_open = '<div class="pagination">';
overall_tag_close แท็กปิดที่ปิดท้ายของการแบ่งหน้า. $Pagination->overall_tag_close = '</div>';
first_page_text ค่าตัวอักษรของคำว่าหน้าแรกในการแบ่งหน้า. กำหนดเป็น string (ตัวอักษร) ที่ต้องการ หรือกำหนดเป็น false เพื่อไม่แสดง. $Pagination->first_page_text = '|&lt;';
first_page_always_show ปกติแล้วตัวแบ่งหน้าที่ลิ้งค์ไปหน้าแรกจะยังไม่แสดงเมื่อหน้าที่กำลังแสดงอยู่เป็นหน้าแรกอยู่แล้ว แต่คุณจะฝืนให้มันแสดงตลอดเวลาก็ได้ด้วยการกำหนดให้เป็น true. หากกำหนดเป็น false จะไม่แสดงเมื่ออยู่หน้าแรกอยู่แล้ว $Pagination->first_page_always_show = false;
first_tag_open แท็กเปิดสำหรับการแบ่งหน้าลิ้งค์ไปหน้าแรก $Pagination->first_tag_open = ' <span class="first-page">';
first_tag_close แท็กปิดสำหรับการแบ่งหน้าลิ้งค์ไปหน้าแรก $Pagination->first_tag_close = '</span> ';
last_page_text ค่าตัวอักษรของคำว่าหน้าสุดท้ายในการแบ่งหน้า. กำหนดเป็น string (ตัวอักษร) ที่ต้องการ หรือกำหนดเป็น false เพื่อไม่แสดง. $Pagination->last_page_text = '&gt;|';
last_page_always_show ปกติแล้วตัวแบ่งหน้าที่ลิ้งค์ไปหน้าสุดท้ายจะไม่แสดงเมื่อหน้าที่กำลัง แสดงอยู่เป็นหน้าสุดท้ายอยู่แล้ว แต่คุณจะฝืนให้มันแสดงตลอดเวลาก็ได้ด้วยการกำหนดให้เป็น true. หากกำหนดเป็น false จะไม่แสดงเมื่ออยู่หน้าสุดท้ายอยู่แล้ว $Pagination->last_page_always_show = false;
last_tag_open แท็กเปิดสำหรับการแบ่งหน้าลิ้งค์ไปหน้าสุดท้าย $Pagination->last_tag_open = ' <span class="last-page">';
last_tag_close แท็กปิดสำหรับการแบ่งหน้าลิ้งค์ไปหน้าสุดท้าย $Pagination->last_tag_close = '</span> ';
next_page_text ค่าตัวอักษรของคำว่าหน้าถัดไปในการแบ่งหน้า. กำหนดเป็น string (ตัวอักษร) ที่ต้องการ หรือกำหนดเป็น false เพื่อไม่แสดง. $Pagination->next_page_text = '&gt;';
next_page_always_show ปกติแล้วตัวแบ่งหน้าที่ลิ้งค์ไปหน้าถัดไปจะไม่แสดงเมื่อหน้าที่กำลัง แสดงอยู่เป็นหน้าสุดท้ายอยู่แล้ว แต่คุณจะฝืนให้มันแสดงตลอดเวลาก็ได้ด้วยการกำหนดให้เป็น true. หากกำหนดเป็น false จะไม่แสดงเมื่ออยู่หน้าสุดท้ายอยู่แล้ว $Pagination->next_page_always_show = false;
next_tag_open แท็กเปิดสำหรับการแบ่งหน้าลิ้งค์ไปหน้าถัดไป $Pagination->next_tag_open = ' <span class="next-page">';
next_tag_close แท็กปิดสำหรับการแบ่งหน้าลิ้งค์ไปหน้าถัดไป $Pagination->next_tag_close = '</span> ';
previous_page_text ค่าตัวอักษรของคำว่าหน้าก่อนในการแบ่งหน้า. กำหนดเป็น string (ตัวอักษร) ที่ต้องการ หรือกำหนดเป็น false เพื่อไม่แสดง. $Pagination->previous_page_text = '&lt;';
previous_page_always_show ปกติแล้วตัวแบ่งหน้าที่ลิ้งค์ไปหน้าก่อนจะยังไม่แสดงเมื่อหน้าที่กำลังแสดงอยู่เป็นหน้าแรกอยู่แล้ว แต่คุณจะฝืนให้มันแสดงตลอดเวลาก็ได้ด้วยการกำหนดให้เป็น true. หากกำหนดเป็น false จะไม่แสดงเมื่ออยู่หน้าแรกอยู่แล้ว $Pagination->previous_page_always_show = false;
previous_tag_open แท็กเปิดสำหรับการแบ่งหน้าลิ้งค์ไปหน้าก่อน $Pagination->previous_tag_open = ' <span class="previous-page">
previous_tag_close แท็กปิดสำหรับการแบ่งหน้าลิ้งค์ไปหน้าก่อน $Pagination->previous_tag_close = '</span> ';
current_page_link แสดงลิ้งค์สำหรับหน้าปัจจุบันหรือไม่. กำหนดเป็น true เพื่อแสดง, false เพื่อไม่แสดง $Pagination->current_page_link = false;
current_tag_open แท็กเปิดสำหรับการแบ่งหน้าลิ้งค์ไปหน้าปัจจุบัน $Pagination->current_tag_open = ' <strong>';
current_tag_close แท็กปิดสำหรับการแบ่งหน้าลิ้งค์ไปหน้าปัจจุบัน $Pagination->current_tag_close = '</strong> ';
number_display แสดงตัวเลขแบ่งหน้าหรือไม่. กำหนดเป็น true เพื่อแสดง, false เพื่อไม่แสดง.
เมื่อกำหนดค่านี้ให้ไม่แสดง มันจะหมายรวมถึงไม่แสดงหน้าที่ขาดช่วงไป ทั้งก่อนและหลัง. คือจะเหลือแสดงแค่ลิ้งค์ไปหน้าแรก, ก่อนหน้า, หน้าถัดไป, หน้าสุดท้าย และหากหน้าเหล่านี้ถูกกำหนดให้ไม่แสดง มันจะไม่แสดงอะไรเลย
$Pagination->number_display = true;
number_tag_open แท็กเปิดสำหรับการแบ่งหน้าลิ้งค์ไปที่เลขหน้าต่างๆ $Pagination->number_tag_open = ' <span class="page-number">';
number_tag_close แท็กปิดสำหรับการแบ่งหน้าลิ้งค์ไปที่เลขหน้าต่างๆ $Pagination->number_tag_close = '</span> ';
number_adjacent_pages กำหนดจำนวนหน้าที่จะแสดงรอบๆหน้าปัจจุบัน เช่น หน้าปัจจุบันคือ 9 กำหนดไว้ 3 มันจะแสดง 6 7 8 9 10 11 12 $Pagination->number_adjacent_pages = 3;
unavailable_display กำหนดให้แสดงหน้าที่ขาดช่วงไปหรือไม่แสดง. กำหนดเป็น true เพื่อแสดง, false เพื่อไม่แสดงเลย.
การกำหนดแสดงหน้าขาดช่วงยังสามารถกำหนดย่อยลงไปได้อีกว่าจะแสดงเลขหน้าก่อนหน้าขาดช่วงหรือไม่? หรือแสดงเลขหน้าหลังหน้าขาดช่วงหรือไม่? หากกำหนดค่าตรงนี้ให้ไม่แสดง มันจะไม่แสดงเลย. ทั้งนี้โปรดดูรายการด้านล่างเพิ่มเติม.
$Pagination->unavailable_display = true;
unavailable_text ข้อความที่จะแสดงว่าเป็นตำแหน่งหน้าขาดช่วง $Pagination->unavailable_text = '&hellip;';
unavailable_tag_open แท็กเปิดสำหรับหน้าขาดช่วง. นี่จะไม่เกี่ยวกับแท็กเลขหน้าก่อนหรือหลังหน้าขาดช่วง ซึ่งตรงนั้นจะใช่ร่วมกับแท็กเปิดเลขหน้าลิ้งค์ปกติ. $Pagination->unavailable_tag_open = ' <span class="unavailable-page">';
unavailable_tag_close แท็กปิดสำหรับหน้าขาดช่วง. นี่จะไม่เกี่ยวกับแท็กเลขหน้าก่อนหรือหลังหน้าขาดช่วง ซึ่งตรงนั้นจะใช่ร่วมกับแท็กเปิดเลขหน้าลิ้งค์ปกติ. $Pagination->unavailable_tag_close = '</span> ';
unavailable_before จำนวนเลขหน้าที่จะแสดงก่อนหน้าขาดช่วง. กำหนดเป็น false เพื่อไม่แสดงหน้าขาดช่วง ช่วงก่อนหน้าปัจจุบัน. $Pagination->unavailable_before = 2;
unavailable_after จำนวนเลขหน้าที่จะแสดงหลังหน้าขาดช่วง. กำหนดเป็น false เพื่อไม่แสดงหน้าขาดช่วง ช่วงหลังหน้าปัจจุบัน. $Pagination->unavailable_after = 2;

การใช้งาน

เมื่อกำหนดค่าการแสดงผลต่างๆผ่าน property ได้แล้ว ให้เรียก method createLinks() เพื่อแสดงผลการแบ่งหน้า

$Pagination = new \Rundiz\Pagination\Pagination();
$Pagination->base_url = 'http://domain.tld/my-category?page=%PAGENUMBER%';
$Pagination->total_records = 1000;
$Pagination->page_number_value = (isset($_GET['page']) ? intval($_GET['page']) : 0);
echo $Pagination->createLinks();

ในการเรียก createLinks() เพื่อแสดงผลการแบ่งหน้านั้น ยังสามารถกำหนดตำแหน่งแทนที่ได้อีก เช่น :current_page_number_displaying จะแทนที่หน้าที่กำลังแสดง, :total_pages จะแทนที่หน้าทั้งหมดที่มี, :pagination จะแทนที่การแบ่งหน้า

ตัวอย่าง

$Pagination->createLinks('Displaying :current_page_number_displaying/:total_pages<br>:pagination');

การแสดงผลการแบ่งหน้าที่กำหนดเอง

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

$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);
 

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>