项目作者: rancoud

项目描述 :
Pagination package
高级语言: PHP
项目地址: git://github.com/rancoud/Pagination.git
创建时间: 2019-01-15T07:03:15Z
项目社区:https://github.com/rancoud/Pagination

开源协议:MIT License

下载


Pagination Package

Packagist PHP Version Support
Packagist Version
Packagist Downloads
Composer dependencies
Test workflow
Codecov

Generate HTML pagination for accessibility.

Dependencies

Security package: https://github.com/rancoud/Security

Installation

  1. composer require rancoud/pagination

How to use it?

  1. use Rancoud\Pagination\Pagination;
  2. $currentPage = 1;
  3. $countElements = 10;
  4. $countElementPerPage = 5;
  5. $p = new Pagination();
  6. $html = $p->generateHtml($currentPage, $countElements, $countElementPerPage);
  7. echo $html;

It will output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

Lexicon

  • Root represents <ul>
  • Item represents <li>
  • Link represents <a>

Pagination Constructor

Settings

Optionnals

Parameter Type Default value Description
configuration array [] Parameters for changing pagination behavior

Pagination Methods

General Commands

Generates HTML pagination.

  1. public function generateHtml(int $currentPage, int $countElements, int $countElementPerPage): string

Generates pagination and returns as array.

  1. public function generateData(int $currentPage, int $countElements, int $countElementPerPage): array

For changing pagination behavior.
Checks for each valid props:

  • when using string: force string type
  • when using tag: use regex /^[a-zA-Z-]+$/i otherwise ignored
  • when using bool: force bool type
  • when using int: force int type and check if value is equal or greater than 0, otherwise use 0.
    1. public function setConfiguration(array $configuration): void

Static methods

Computes number of pages.
The formula is ceil($countElements / $countElementPerPage).

  1. public static function countPages(int $countElements, int $countElementPerPage): int

Finds the page where the item index is located.
The formula is ceil($itemIndex / $countElementPerPage).

  1. public static function locateItemInPage(int $countElementPerPage, int $itemIndex): int

Configuration Parameters

Url

Behavior

  • show_all_links (bool: false) (example)
  • use_previous (bool: false) (example)
  • always_use_previous (bool: false) (example)
  • use_next (bool: false) (example)
  • always_use_next (bool: false) (example)
  • use_dots (bool: false) (example)
  • count_pages_pair_limit (int: 0) (example)
  • count_pages_pair_adjacent (int: 2) (example)

Labels

  • text_previous (string: Previous page) (example)
  • text_next (string: Next page) (example)
  • text_dots (string: …) (example)
  • text_page (string: {{PAGE}}) (example)
  • aria_label_link (string: Goto page {{PAGE}}) (example)
  • aria_label_current_link (string: Current page, page {{PAGE}}) (example)
  • aria_label_nav (string: Pagination) (example)
  • aria_label_previous (string: Previous page) (example)
  • aria_label_next (string: Next page) (example)
  • thousands_separator (string) (example)

HTML markup

Root

Item

  • item_tag (string: li) (example)
  • item_attrs (string) (example)
  • item_attrs_current (string) (example)
  • item_previous_attrs (string) (example)
  • item_previous_attrs_disabled (string) (example)
  • item_next_attrs (string) (example)
  • item_next_attrs_disabled (string) (example)
  • item_dots_attrs (string) (example)
  • link_tag (string: a) (example)
  • link_attrs (string) (example)
  • link_attrs_current (string) (example)
  • link_previous_attrs_disabled (string) (example)
  • link_next_attrs_disabled (string) (example)
  • dot_tag (string: span) (example)
  • dot_attrs (string) (example)

Indentation

  • use_pretty_html (bool: true) (example)
  • html_tab_sequence (string: \t) (example)
  • html_initial_indentation (int: 0) (example)

Security

You have to sanitize by yourself thoses parameters:

  • nav_attrs
  • root_attrs
  • item_attrs
  • item_attrs_current
  • item_previous_attrs
  • item_previous_attrs_disabled
  • item_next_attrs
  • item_next_attrs_disabled
  • item_dots_attrs
  • link_attrs
  • link_attrs_current
  • link_previous_attrs_disabled
  • link_next_attrs_disabled
  • dot_attrs
  • html_tab_sequence

Examples

url

Page append at the end

Input

  1. $conf = [
  2. 'url' => 'https://example.com/news/page/'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="https://example.com/news/page/2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'url' => 'https://example.com/news/page/{{PAGE}}/?date=desc'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="https://example.com/news/page/2/?date=desc" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

After page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'url' => '{{PAGE}}?date=desc'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2?date=desc" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / Url

Input

  1. $conf = [
  2. 'show_all_links' => true
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 30, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li>
  10. <a href="3" aria-label="Page 3">3</a>
  11. </li>
  12. <li>
  13. <a href="4" aria-label="Page 4">4</a>
  14. </li>
  15. <li>
  16. <a href="5" aria-label="Page 5">5</a>
  17. </li>
  18. <li>
  19. <a href="6" aria-label="Page 6">6</a>
  20. </li>
  21. </ul>
  22. </nav>

⏫ Configuration Parameters / Behavior

use_previous

Input

  1. $conf = [
  2. 'use_previous' => true
  3. ];
  4. echo (new Pagination($conf))->generateHtml(2, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="1" aria-label="Previous page">Previous page</a>
  5. </li>
  6. <li>
  7. <a href="1" aria-label="Page 1">1</a>
  8. </li>
  9. <li>
  10. <a href="#" aria-label="Page 2" aria-current="page">2</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / Behavior

always_use_previous

Previous has aria-disabled=true on link tag if there is no previous page

Input

  1. $conf = [
  2. 'always_use_previous' => true
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Previous page" aria-disabled="true">Previous page</a>
  5. </li>
  6. <li>
  7. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  8. </li>
  9. <li>
  10. <a href="2" aria-label="Page 2">2</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / Behavior

use_next

Input

  1. $conf = [
  2. 'use_next' => true
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li>
  10. <a href="2" aria-label="Next page">Next page</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / Behavior

always_use_next

Next has aria-disabled=true on link tag if there is no next page

Input

  1. $conf = [
  2. 'always_use_next' => true
  3. ];
  4. echo (new Pagination($conf))->generateHtml(2, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="1" aria-label="Page 1">1</a>
  5. </li>
  6. <li>
  7. <a href="#" aria-label="Page 2" aria-current="page">2</a>
  8. </li>
  9. <li>
  10. <a href="#" aria-label="Next page" aria-disabled="true">Next page</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / Behavior

use_dots

Input

  1. $conf = [
  2. 'use_dots' => true
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 30, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li>
  10. <a href="3" aria-label="Page 3">3</a>
  11. </li>
  12. <li aria-hidden="true">
  13. <span></span>
  14. </li>
  15. </ul>
  16. </nav>

⏫ Configuration Parameters / Behavior

count_pages_pair_limit

Input

  1. $conf = [
  2. 'count_pages_pair_limit' => 1
  3. ];
  4. echo (new Pagination($conf))->generateHtml(5, 300, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="1" aria-label="Page 1">1</a>
  5. </li>
  6. <li>
  7. <a href="3" aria-label="Page 3">3</a>
  8. </li>
  9. <li>
  10. <a href="4" aria-label="Page 4">4</a>
  11. </li>
  12. <li>
  13. <a href="#" aria-label="Page 5" aria-current="page">5</a>
  14. </li>
  15. <li>
  16. <a href="6" aria-label="Page 6">6</a>
  17. </li>
  18. <li>
  19. <a href="7" aria-label="Page 7">7</a>
  20. </li>
  21. <li>
  22. <a href="60" aria-label="Page 60">60</a>
  23. </li>
  24. </ul>
  25. </nav>

⏫ Configuration Parameters / Behavior

count_pages_pair_adjacent

Input

  1. $conf = [
  2. 'count_pages_pair_adjacent' => 1
  3. ];
  4. echo (new Pagination($conf))->generateHtml(5, 300, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="4" aria-label="Page 4">4</a>
  5. </li>
  6. <li>
  7. <a href="#" aria-label="Page 5" aria-current="page">5</a>
  8. </li>
  9. <li>
  10. <a href="6" aria-label="Page 6">6</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / Behavior

count_pages_pair_adjacent + count_pages_pair_adjacent

count_pages_pair_limit 0 + count_pages_pair_adjacent 0

Input

  1. $conf = [
  2. 'count_pages_pair_limit' => 0,
  3. 'count_pages_pair_adjacent' => 0
  4. ];
  5. echo (new Pagination($conf))->generateHtml(5, 300, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 5" aria-current="page">5</a>
  5. </li>
  6. </ul>
  7. </nav>

count_pages_pair_limit 2 + count_pages_pair_adjacent 2

Input

  1. $conf = [
  2. 'count_pages_pair_limit' => 2,
  3. 'count_pages_pair_adjacent' => 2
  4. ];
  5. echo (new Pagination($conf))->generateHtml(5, 300, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="1" aria-label="Page 1">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li>
  10. <a href="3" aria-label="Page 3">3</a>
  11. </li>
  12. <li>
  13. <a href="4" aria-label="Page 4">4</a>
  14. </li>
  15. <li>
  16. <a href="#" aria-label="Page 5" aria-current="page">5</a>
  17. </li>
  18. <li>
  19. <a href="6" aria-label="Page 6">6</a>
  20. </li>
  21. <li>
  22. <a href="7" aria-label="Page 7">7</a>
  23. </li>
  24. <li>
  25. <a href="59" aria-label="Page 59">59</a>
  26. </li>
  27. <li>
  28. <a href="60" aria-label="Page 60">60</a>
  29. </li>
  30. </ul>
  31. </nav>

⏫ Configuration Parameters / Behavior

text_previous

Input

  1. $conf = [
  2. 'use_previous' => true,
  3. 'text_previous' => 'prev'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(2, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="1" aria-label="Previous page">prev</a>
  5. </li>
  6. <li>
  7. <a href="1" aria-label="Page 1">1</a>
  8. </li>
  9. <li>
  10. <a href="#" aria-label="Page 2" aria-current="page">2</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / Labels

text_next

Input

  1. $conf = [
  2. 'use_next' => true,
  3. 'text_next' => 'next'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li>
  10. <a href="2" aria-label="Next page">next</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / Labels

text_dots

Input

  1. $conf = [
  2. 'use_dots' => true,
  3. 'text_dots' => 'dots'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 30, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li>
  10. <a href="3" aria-label="Page 3">3</a>
  11. </li>
  12. <li aria-hidden="true">
  13. <span>dots</span>
  14. </li>
  15. </ul>
  16. </nav>

⏫ Configuration Parameters / Labels

text_page

Page append at the end

Input

  1. $conf = [
  2. 'text_page' => 'yolo'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">yolo 1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">yolo 2</a>
  8. </li>
  9. </ul>
  10. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'text_page' => 'yo {{PAGE}} lo'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">yo 1 lo</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">yo 2 lo</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / Labels

Input

  1. $conf = [
  2. 'aria_label_link' => 'aria label link'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="aria label link">2</a>
  8. </li>
  9. </ul>
  10. </nav>

With {{PAGE}} pattern

Input

  1. $conf = [
  2. 'aria_label_link' => 'aria label link {{PAGE}}'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="aria label link 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / Labels

Input

  1. $conf = [
  2. 'aria_label_current_link' => 'aria label current link'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="aria label current link" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'aria_label_current_link' => 'aria label current link {{PAGE}}'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="aria label current link 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / Labels

aria_label_nav

Input

  1. $conf = [
  2. 'aria_label_nav' => 'aria label nav'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="aria label nav">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / Labels

aria_label_previous

Input

  1. $conf = [
  2. 'use_previous' => true,
  3. 'aria_label_previous' => 'prev'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(2, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="1" aria-label="prev">Previous page</a>
  5. </li>
  6. <li>
  7. <a href="1" aria-label="Page 1">1</a>
  8. </li>
  9. <li>
  10. <a href="#" aria-label="Page 2" aria-current="page">2</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / Labels

aria_label_next

Input

  1. $conf = [
  2. 'use_next' => true,
  3. 'aria_label_next' => 'next'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li>
  10. <a href="2" aria-label="next">Next page</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / Labels

thousands_separator

Input

  1. $conf = [
  2. 'thousands_separator' => ';',
  3. 'count_pages_pair_limit' => 1
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 1000, 1);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li>
  10. <a href="3" aria-label="Page 3">3</a>
  11. </li>
  12. <li>
  13. <a href="1000" aria-label="Page 1000">1;000</a>
  14. </li>
  15. </ul>
  16. </nav>

⏫ Configuration Parameters / Labels

root_tag

Input

  1. $conf = [
  2. 'root_tag' => 'root'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <root>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </root>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Root

root_attrs

Input

  1. $conf = [
  2. 'root_attrs' => 'data-root="attrs"'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul data-root="attrs">
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Root

use_nav

Input

  1. $conf = [
  2. 'use_nav' => false
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <ul>
  2. <li>
  3. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  4. </li>
  5. <li>
  6. <a href="2" aria-label="Page 2">2</a>
  7. </li>
  8. </ul>

⏫ Configuration Parameters / HTML markup / Root

nav_attrs

Input

  1. $conf = [
  2. 'nav_attrs' => 'data-item="attrs"'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination" data-item="attrs">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Root

item_tag

Input

  1. $conf = [
  2. 'item_tag' => 'item'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <item>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </item>
  6. <item>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </item>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Item

item_attrs

Input

  1. $conf = [
  2. 'item_attrs' => 'data-item="attrs"'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li data-item="attrs">
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'item_attrs' => 'data-item="attrs {{PAGE}}"'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li data-item="attrs 2">
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Item

item_attrs_current

Input

  1. $conf = [
  2. 'item_attrs_current' => 'data-item-current="attrs"'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li data-item-current="attrs">
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'item_attrs_current' => 'data-item-current="attrs {{PAGE}}"'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li data-item-current="attrs 1">
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Item

item_previous_attrs

Input

  1. $conf = [
  2. 'use_previous' => true,
  3. 'item_previous_attrs' => 'data-item-previous="attrs"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(2, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li data-item-previous="attrs">
  4. <a href="1" aria-label="Previous page">Previous page</a>
  5. </li>
  6. <li>
  7. <a href="1" aria-label="Page 1">1</a>
  8. </li>
  9. <li>
  10. <a href="#" aria-label="Page 2" aria-current="page">2</a>
  11. </li>
  12. </ul>
  13. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'use_previous' => true,
  3. 'item_previous_attrs' => 'data-item-previous="attrs {{PAGE}}"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(2, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li data-item-previous="attrs 1">
  4. <a href="1" aria-label="Previous page">Previous page</a>
  5. </li>
  6. <li>
  7. <a href="1" aria-label="Page 1">1</a>
  8. </li>
  9. <li>
  10. <a href="#" aria-label="Page 2" aria-current="page">2</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / HTML markup / Item

item_previous_attrs_disabled

Input

  1. $conf = [
  2. 'always_use_previous' => true,
  3. 'item_previous_attrs_disabled' => 'data-item-previous-disabled="attrs"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li data-item-previous-disabled="attrs">
  4. <a href="#" aria-label="Previous page" aria-disabled="true">Previous page</a>
  5. </li>
  6. <li>
  7. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  8. </li>
  9. <li>
  10. <a href="2" aria-label="Page 2">2</a>
  11. </li>
  12. </ul>
  13. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'always_use_previous' => true,
  3. 'item_previous_attrs_disabled' => 'data-item-previous-disabled="attrs {{PAGE}}"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li data-item-previous-disabled="attrs 0">
  4. <a href="#" aria-label="Previous page" aria-disabled="true">Previous page</a>
  5. </li>
  6. <li>
  7. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  8. </li>
  9. <li>
  10. <a href="2" aria-label="Page 2">2</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / HTML markup / Item

item_next_attrs

Input

  1. $conf = [
  2. 'use_next' => true,
  3. 'item_next_attrs' => 'data-item-next="attrs"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li data-item-next="attrs">
  10. <a href="2" aria-label="Next page">Next page</a>
  11. </li>
  12. </ul>
  13. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'use_next' => true,
  3. 'item_next_attrs' => 'data-item-next="attrs {{PAGE}}"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li data-item-next="attrs 2">
  10. <a href="2" aria-label="Next page">Next page</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / HTML markup / Item

item_next_attrs_disabled

Input

  1. $conf = [
  2. 'always_use_next' => true,
  3. 'item_next_attrs_disabled' => 'data-item-next-disabled="attrs"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(2, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="1" aria-label="Page 1">1</a>
  5. </li>
  6. <li>
  7. <a href="#" aria-label="Page 2" aria-current="page">2</a>
  8. </li>
  9. <li data-item-next-disabled="attrs">
  10. <a href="#" aria-label="Next page" aria-disabled="true">Next page</a>
  11. </li>
  12. </ul>
  13. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'always_use_next' => true,
  3. 'item_next_attrs_disabled' => 'data-item-next-disabled="attrs {{PAGE}}"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(2, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="1" aria-label="Page 1">1</a>
  5. </li>
  6. <li>
  7. <a href="#" aria-label="Page 2" aria-current="page">2</a>
  8. </li>
  9. <li data-item-next-disabled="attrs 2">
  10. <a href="#" aria-label="Next page" aria-disabled="true">Next page</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / HTML markup / Item

item_dots_attrs

Input

  1. $conf = [
  2. 'use_dots' => true,
  3. 'item_dots_attrs' => 'data-item-dots="attrs"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 30, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li>
  10. <a href="3" aria-label="Page 3">3</a>
  11. </li>
  12. <li data-item-dots="attrs" aria-hidden="true">
  13. <span></span>
  14. </li>
  15. </ul>
  16. </nav>

⏫ Configuration Parameters / HTML markup / Item

Input

  1. $conf = [
  2. 'link_tag' => 'link'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <link href="#" aria-label="Page 1" aria-current="page">1</link>
  5. </li>
  6. <li>
  7. <link href="2" aria-label="Page 2">2</link>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Link

Input

  1. $conf = [
  2. 'link_attrs' => 'data-link="attrs"'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a data-link="attrs" href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'link_attrs' => 'data-link="attrs {{PAGE}}"'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a data-link="attrs 2" href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Link

Input

  1. $conf = [
  2. 'link_attrs_current' => 'data-link-current="attrs"'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a data-link-current="attrs" href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'link_attrs_current' => 'data-link-current="attrs {{PAGE}}"'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a data-link-current="attrs 1" href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Link

Input

  1. $conf = [
  2. 'always_use_previous' => true,
  3. 'link_previous_attrs_disabled' => 'data-item-next-disabled="attrs"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a data-item-next-disabled="attrs" href="#" aria-label="Previous page" aria-disabled="true">Previous page</a>
  5. </li>
  6. <li>
  7. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  8. </li>
  9. <li>
  10. <a href="2" aria-label="Page 2">2</a>
  11. </li>
  12. </ul>
  13. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'always_use_previous' => true,
  3. 'link_previous_attrs_disabled' => 'data-item-next-disabled="attrs {{PAGE}}"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a data-item-next-disabled="attrs 0" href="#" aria-label="Previous page" aria-disabled="true">Previous page</a>
  5. </li>
  6. <li>
  7. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  8. </li>
  9. <li>
  10. <a href="2" aria-label="Page 2">2</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / HTML markup / Link

Input

  1. $conf = [
  2. 'always_use_next' => true,
  3. 'link_next_attrs_disabled' => 'data-item-next-disabled="attrs"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(2, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="1" aria-label="Page 1">1</a>
  5. </li>
  6. <li>
  7. <a href="#" aria-label="Page 2" aria-current="page">2</a>
  8. </li>
  9. <li>
  10. <a data-item-next-disabled="attrs" href="#" aria-label="Next page" aria-disabled="true">Next page</a>
  11. </li>
  12. </ul>
  13. </nav>

Page replace with {{PAGE}} pattern

Input

  1. $conf = [
  2. 'always_use_next' => true,
  3. 'link_next_attrs_disabled' => 'data-item-next-disabled="attrs {{PAGE}}"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(2, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="1" aria-label="Page 1">1</a>
  5. </li>
  6. <li>
  7. <a href="#" aria-label="Page 2" aria-current="page">2</a>
  8. </li>
  9. <li>
  10. <a data-item-next-disabled="attrs 2" href="#" aria-label="Next page" aria-disabled="true">Next page</a>
  11. </li>
  12. </ul>
  13. </nav>

⏫ Configuration Parameters / HTML markup / Link

dot_tag

Input

  1. $conf = [
  2. 'use_dots' => true,
  3. 'dot_tag' => 'p'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 30, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li>
  10. <a href="3" aria-label="Page 3">3</a>
  11. </li>
  12. <li aria-hidden="true">
  13. <p></p>
  14. </li>
  15. </ul>
  16. </nav>

⏫ Configuration Parameters / HTML markup / Link

dot_attrs

Input

  1. $conf = [
  2. 'use_dots' => true,
  3. 'dot_attrs' => 'data-dot="attrs"'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 30, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. <li>
  10. <a href="3" aria-label="Page 3">3</a>
  11. </li>
  12. <li aria-hidden="true">
  13. <span data-dot="attrs"></span>
  14. </li>
  15. </ul>
  16. </nav>

⏫ Configuration Parameters / HTML markup / Link

use_pretty_html

Input

  1. $conf = [
  2. 'use_pretty_html' => false
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination"><ul><li><a href="#" aria-label="Page 1" aria-current="page">1</a></li><li><a href="2" aria-label="Page 2">2</a></li></ul></nav>

⏫ Configuration Parameters / HTML markup / Indentation

html_tab_sequence

Input

  1. $conf = [
  2. 'html_tab_sequence' => ''
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Indentation

html_initial_indentation

Input

  1. $conf = [
  2. 'html_initial_indentation' => 1
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Indentation

esc_attr

Input

  1. $conf = [
  2. 'esc_attr' => false
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Security

esc_html

Input

  1. $conf = [
  2. 'esc_html' => false,
  3. 'text_page' => '<em>{{PAGE}}</em>'
  4. ];
  5. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page"><em>1</em></a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2"><em>2</em></a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Security

charset

Input

  1. $conf = [
  2. 'charset' => 'EUC-JP'
  3. ];
  4. echo (new Pagination($conf))->generateHtml(1, 10, 5);

Output

  1. <nav aria-label="Pagination">
  2. <ul>
  3. <li>
  4. <a href="#" aria-label="Page 1" aria-current="page">1</a>
  5. </li>
  6. <li>
  7. <a href="2" aria-label="Page 2">2</a>
  8. </li>
  9. </ul>
  10. </nav>

⏫ Configuration Parameters / HTML markup / Security

generateData output

  1. $conf = [
  2. 'always_use_previous' => true,
  3. 'always_use_next' => true,
  4. 'use_dots' => true,
  5. ]
  6. var_dump(new Pagination($conf))->generateData(1, 3000, 5);
  7. array (size=3)
  8. 'previous' =>
  9. object(Rancoud\Pagination\Item)[2]
  10. public 'ariaLabel' => string 'Previous page' (length=18)
  11. public 'href' => string '#' (length=6)
  12. public 'itemAttrs' => string '' (length=0)
  13. public 'linkAttrs' => string '' (length=0)
  14. public 'text' => string 'Previous page' (length=13)
  15. public 'isCurrent' => boolean false
  16. public 'isDots' => boolean false
  17. public 'isDisabled' => boolean true
  18. public 'page' => int 0
  19. 'links' =>
  20. array (size=4)
  21. 0 =>
  22. object(Rancoud\Pagination\Item)[4]
  23. public 'ariaLabel' => string 'Page 1' (length=11)
  24. public 'href' => string '#' (length=6)
  25. public 'itemAttrs' => string '' (length=0)
  26. public 'linkAttrs' => string '' (length=0)
  27. public 'text' => string '1' (length=1)
  28. public 'isCurrent' => boolean true
  29. public 'isDots' => boolean false
  30. public 'isDisabled' => boolean false
  31. public 'page' => int 1
  32. 1 =>
  33. object(Rancoud\Pagination\Item)[5]
  34. public 'ariaLabel' => string 'Page 2' (length=11)
  35. public 'href' => string '2' (length=1)
  36. public 'itemAttrs' => string '' (length=0)
  37. public 'linkAttrs' => string '' (length=0)
  38. public 'text' => string '2' (length=1)
  39. public 'isCurrent' => boolean false
  40. public 'isDots' => boolean false
  41. public 'isDisabled' => boolean false
  42. public 'page' => int 2
  43. 2 =>
  44. object(Rancoud\Pagination\Item)[6]
  45. public 'ariaLabel' => string 'Page 3' (length=11)
  46. public 'href' => string '3' (length=1)
  47. public 'itemAttrs' => string '' (length=0)
  48. public 'linkAttrs' => string '' (length=0)
  49. public 'text' => string '3' (length=1)
  50. public 'isCurrent' => boolean false
  51. public 'isDots' => boolean false
  52. public 'isDisabled' => boolean false
  53. public 'page' => int 3
  54. 3 =>
  55. object(Rancoud\Pagination\Item)[7]
  56. public 'ariaLabel' => string 'Page 4' (length=11)
  57. public 'href' => string '4' (length=1)
  58. public 'itemAttrs' => string '' (length=0)
  59. public 'linkAttrs' => string '' (length=0)
  60. public 'text' => string '…' (length=3)
  61. public 'isCurrent' => boolean false
  62. public 'isDots' => boolean true
  63. public 'isDisabled' => boolean false
  64. public 'page' => int 4
  65. 'next' =>
  66. object(Rancoud\Pagination\Item)[8]
  67. public 'ariaLabel' => string 'Next page' (length=14)
  68. public 'href' => string '2' (length=1)
  69. public 'itemAttrs' => string '' (length=0)
  70. public 'linkAttrs' => string '' (length=0)
  71. public 'text' => string 'Next page' (length=9)
  72. public 'isCurrent' => boolean false
  73. public 'isDots' => boolean false
  74. public 'isDisabled' => boolean false
  75. public 'page' => int 2

How to Dev

composer ci for php-cs-fixer and phpunit and coverage
composer lint for php-cs-fixer
composer test for phpunit and coverage