Pagination คือ class หรือส่วนเสริมสำหรับ PHP ที่จะใช้ในการแบ่งหน้าเมื่อต้องแสดงผลของข้อมูลจำนวนมากๆ โดยที่ไม่ต้องแสดงข้อมูลเหล่านั้นในทีเดียว แต่เอามาแบ่งหน้าแสดง.
ดาวน์โหลด หรือติดตั้งผ่าน Composer
เอกสารอ้างอิง API
License: MIT
ส่วนประกอบต่างๆ
ส่วนประกอบต่างๆใน 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 ต่างๆในตารางต่อไปนี้
Properties
ชื่อ | รายละเอียด | ตัวอย่าง |
---|---|---|
base_url | URL ที่จะใช้ในการสร้างลิ้งค์แบ่งหน้า. กำหนดตำแหน่งที่ค่าของเลขแบ่งหน้าจะปรากฏด้วยตัวแทนค่า %PAGENUMBER%
ตัวอย่าง
|
$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 = '|<'; |
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 = '>|'; |
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 = '>'; |
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 = '<'; |
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 = '…'; |
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%&', '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);