/application/libraries/MY_Pagination.php

https://github.com/picoder/Deltus · PHP · 148 lines · 95 code · 29 blank · 24 comment · 22 complexity · 794b4bb874c667ce857e171b586c4792 MD5 · raw file

  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. class MY_Pagination extends CI_Pagination
  3. {
  4. function __construct($params = array())
  5. {
  6. parent::__construct($params);
  7. }
  8. function initialize($params = array())
  9. {
  10. parent::initialize($params);
  11. }
  12. function create_links($use_offsets = false)
  13. {
  14. if ($use_offsets)
  15. return parent::create_links();
  16. else
  17. return $this->create_links_without_offsets();
  18. }
  19. function create_links_without_offsets()
  20. {
  21. // If our item count or per-page total is zero there is no need to continue.
  22. if ($this->total_rows == 0 OR $this->per_page == 0)
  23. {
  24. return '';
  25. }
  26. // Calculate the total number of pages
  27. $num_pages = ceil($this->total_rows / $this->per_page);
  28. // Is there only one page? Hm... nothing more to do here then.
  29. if ($num_pages == 1)
  30. {
  31. return '';
  32. }
  33. // Determine the current page number.
  34. $CI =& get_instance();
  35. if ($CI->uri->segment($this->uri_segment) != 0)
  36. {
  37. $this->cur_page = $CI->uri->segment($this->uri_segment);
  38. // Prep the current page - no funny business!
  39. $this->cur_page = (int) $this->cur_page;
  40. }
  41. $this->num_links = (int)$this->num_links;
  42. if ($this->num_links < 1)
  43. {
  44. show_error('Your number of links must be a positive number.');
  45. }
  46. if ( ! is_numeric($this->cur_page))
  47. {
  48. $this->cur_page = 1;
  49. }
  50. // make sure cur_page is atleast 1
  51. if ($this->cur_page < 1) {
  52. $this->cur_page = 1;
  53. }
  54. // Is the page number beyond the result range?
  55. // If so we show the last page
  56. if ($this->cur_page > $num_pages)
  57. {
  58. $this->cur_page = $num_pages;
  59. }
  60. $uri_page_number = $this->cur_page;
  61. //$this->cur_page = floor(($this->cur_page/$this->per_page) + 1);
  62. // Calculate the start and end numbers. These determine
  63. // which number to start and end the digit links with
  64. $start = (($this->cur_page - $this->num_links) > 0) ? $this->cur_page - ($this->num_links - 1) : 1;
  65. $end = (($this->cur_page + $this->num_links) < $num_pages) ? $this->cur_page + $this->num_links : $num_pages;
  66. // Add a trailing slash to the base URL if needed
  67. $this->base_url = rtrim($this->base_url, '/') .'/';
  68. // And here we go...
  69. $output = '';
  70. // Render the "First" link
  71. if ($this->cur_page > $this->num_links)
  72. {
  73. $output .= $this->first_tag_open.'<a href="'.$this->base_url.'/1/'.$this->suffix.'">'.$this->first_link.'</a>'.$this->first_tag_close;
  74. }
  75. // Render the "previous" link
  76. if ($this->cur_page > 1)
  77. {
  78. $i = $uri_page_number - 1;
  79. //if ($i == 1) $i = '';
  80. $output .= $this->prev_tag_open.'<a href="'.$this->base_url.$i.'/'.$this->suffix.'">'.$this->prev_link.'</a>'.$this->prev_tag_close;
  81. }
  82. // Write the digit links
  83. for ($loop = $start -1; $loop <= $end; $loop++)
  84. {
  85. $i = $loop;
  86. if ($i >= 1)
  87. {
  88. if ($this->cur_page == $loop)
  89. {
  90. $output .= $this->cur_tag_open.$loop.$this->cur_tag_close; // Current page
  91. }
  92. else
  93. {
  94. $n = ($i == 0) ? '' : $i;
  95. $output .= $this->num_tag_open.'<a href="'.$this->base_url.$n.'/'.$this->suffix.'">'.$loop.'</a>'.$this->num_tag_close;
  96. }
  97. }
  98. }
  99. // Render the "next" link
  100. if ($this->cur_page < $num_pages)
  101. {
  102. $output .= $this->next_tag_open.'<a href="'.$this->base_url.($this->cur_page + 1).'/'.$this->suffix.'">'.$this->next_link.'</a>'.$this->next_tag_close;
  103. }
  104. // Render the "Last" link
  105. if (($this->cur_page + $this->num_links) < $num_pages)
  106. {
  107. $i = $num_pages;
  108. $output .= $this->last_tag_open.'<a href="'.$this->base_url.$i.'/'.$this->suffix.'">'.$this->last_link.'</a>'.$this->last_tag_close;
  109. }
  110. // Kill double slashes. Note: Sometimes we can end up with a double slash
  111. // in the penultimate link so we'll kill all double slashes.
  112. $output = preg_replace("#([^:])//+#", "\\1/", $output);
  113. // Add the wrapper HTML if exists
  114. $output = $this->full_tag_open.$output.$this->full_tag_close;
  115. return $output;
  116. }
  117. }
  118. // END Pagination Class
  119. /* End of file MY_Pagination.php */