Elgg  Version 1.12
pagination.php
Go to the documentation of this file.
1 <?php
16 if (elgg_in_context('widget')) {
17  // widgets do not show pagination
18  return;
19 }
20 
21 $count = (int) elgg_extract('count', $vars, 0);
22 if (!$count) {
23  return;
24 }
25 
26 $offset = abs((int) elgg_extract('offset', $vars, 0));
27 // because you can say $vars['limit'] = 0
28 if (!$limit = (int) elgg_extract('limit', $vars, elgg_get_config('default_limit'))) {
29  $limit = 10;
30 }
31 
32 $offset_key = elgg_extract('offset_key', $vars, 'offset');
33 $url_fragment = elgg_extract('url_fragment', $vars, '');
34 
35 // some views pass an empty string for base_url
36 if (isset($vars['base_url']) && $vars['base_url']) {
37  $base_url = $vars['base_url'];
38 } else if (isset($vars['baseurl']) && $vars['baseurl']) {
39  elgg_deprecated_notice("Use 'base_url' instead of 'baseurl' for the navigation/pagination view", 1.8);
40  $base_url = $vars['baseurl'];
41 } elseif (elgg_is_xhr() && !empty($_SERVER['HTTP_REFERER'])) {
42  $base_url = $_SERVER['HTTP_REFERER'];
43 } else {
44  $base_url = current_page_url();
45 }
46 
47 $base_url_has_fragment = preg_match('~#.~', $base_url);
48 
50  $link = elgg_http_add_url_query_elements($base_url, array($offset_key => $offset));
52  $link .= "#$url_fragment";
53  }
54  return $link;
55 };
56 
57 if ($count <= $limit && $offset == 0) {
58  // no need for pagination
59  return;
60 }
61 
62 $total_pages = (int) ceil($count / $limit);
63 $current_page = (int) ceil($offset / $limit) + 1;
64 
65 $pages = array();
66 
67 // determine starting page
68 $start_page = max(min([$current_page - 2, $total_pages - 4]), 1);
69 
70 // add previous
72 if ($prev_offset < 1) {
73  // don't include offset=0
74  $prev_offset = null;
75 }
76 
77 $pages['prev'] = [
78  'text' => elgg_echo('previous'),
79  'href' => $get_href($prev_offset),
80 ];
81 
82 if ($current_page == 1) {
83  $pages['prev']['disabled'] = true;
84 }
85 
86 // add first page to be listed
87 if (1 < $start_page) {
88  $pages[1] = [];
89 }
90 
91 // added dotted spacer
92 if (1 < ($start_page - 2)) {
93  $pages[] = ['text' => '...', 'disabled' => true];
94 } elseif ($start_page == 3) {
95  $pages[2] = [];
96 }
97 
98 $max = 1;
99 for ($page = $start_page; $page <= $total_pages; $page++) {
100  if ($max > 5) {
101  break;
102  }
103  $pages[$page] = [];
104  $max++;
105 }
106 
107 // added dotted spacer
108 if ($total_pages > ($start_page + 6)) {
109  $pages[] = ['text' => '...', 'disabled' => true];
110 } elseif (($start_page + 5) == ($total_pages - 1)) {
111  $pages[$total_pages - 1] = [];
112 }
113 
114 // add last page to be listed
115 if ($total_pages >= ($start_page + 5)) {
116  $pages[$total_pages] = [];
117 }
118 
119 // add next
121 if ($next_offset >= $count) {
122  $next_offset--;
123 }
124 
125 $pages['next'] = [
126  'text' => elgg_echo('next'),
127  'href' => $get_href($next_offset),
128 ];
129 
130 if ($current_page == $total_pages) {
131  $pages['next']['disabled'] = true;
132 }
133 
134 $list ="";
135 foreach ($pages as $page_num => $page) {
136  if ($page_num == $current_page) {
137  $list .= elgg_format_element('li', ['class' => 'elgg-state-selected'], "<span>$page_num</span>");
138  } else {
139  $href = elgg_extract('href', $page);
140  $text = elgg_extract('text', $page, $page_num);
141  $disabled = elgg_extract('disabled', $page, false);
142 
143  if (!$href && !$disabled) {
144  $page_offset = (($page_num - $current_page) * $limit) + $offset;
145  if ($page_offset <= 0) {
146  // don't include offset=0
147  $page_offset = null;
148  }
149  $href = $get_href($page_offset);
150  }
151 
152  if ($href && !$disabled) {
153  $link = elgg_view('output/url', array(
154  'href' => $href,
155  'text' => $text,
156  'is_trusted' => true,
157  ));
158  } else {
159  $link = elgg_format_element('span', [], $page['text']);
160  }
161 
162  $element_options = array();
163  if ($disabled) {
164  $element_options['class'] = 'elgg-state-disabled';
165  }
166 
167  $list .= elgg_format_element('li', $element_options, $link);
168  }
169 }
170 
171 echo elgg_format_element('ul', ['class' => 'elgg-pagination'], $list);
elgg_http_add_url_query_elements($url, array $elements)
Sets elements in a URL&#39;s query string.
Definition: elgglib.php:1132
elgg_get_config($name, $site_guid=0)
Get an Elgg configuration value.
$url_fragment
Definition: pagination.php:33
elgg_is_xhr()
Checks whether the request was requested via ajax.
Definition: actions.php:227
$current_page
Definition: pagination.php:63
current_page_url()
Returns the current page&#39;s complete URL.
Definition: input.php:65
if(!$count) $offset
Definition: pagination.php:26
elgg_format_element($tag_name, array $attributes=array(), $text= '', array $options=array())
Format an HTML element.
Definition: output.php:215
$text
Definition: default.php:25
for($page=$start_page;$page<=$total_pages;$page++) if($total_pages >($start_page+6)) elseif(($start_page+5)==($total_pages-1)) if($total_pages >=($start_page+5)) $next_offset
Definition: pagination.php:120
if($prev_offset< 1) if($current_page==1) if(1< $start_page) if(1< ($start_page-2)) elseif($start_page==3) $max
Definition: pagination.php:98
$limit
Definition: userpicker.php:38
if($next_offset >=$count) if($current_page==$total_pages) $list
Definition: pagination.php:134
elgg_echo($message_key, $args=array(), $language="")
Given a message key, returns an appropriately translated full-text string.
Definition: languages.php:21
$start_page
Definition: pagination.php:68
elgg_in_context($context)
Check if this context exists anywhere in the stack.
Definition: pageowner.php:244
elgg echo
Translates a string.
Definition: languages.js:48
elgg_deprecated_notice($msg, $dep_version, $backtrace_level=1)
Log a notice about deprecated use of a function, view, etc.
Definition: elgglib.php:1031
elgg_view($view, $vars=array(), $bypass=false, $ignored=false, $viewtype= '')
Return a parsed view.
Definition: views.php:340
elgg_extract($key, $array, $default=null, $strict=true)
Checks for $array[$key] and returns its value if it exists, else returns $default.
Definition: elgglib.php:1271
$pages
Definition: pagination.php:65
if($count<=$limit &&$offset==0) $total_pages
Definition: pagination.php:62
$get_href
Definition: pagination.php:49
if(!$limit=(int) elgg_extract('limit', $vars, elgg_get_config('default_limit'))) $offset_key
Definition: pagination.php:32
$prev_offset
Definition: pagination.php:71
if(elgg_in_context('widget')) $count
Definition: pagination.php:21
$base_url_has_fragment
Definition: pagination.php:47
if(file_exists($welcome)) $vars
Definition: upgrade.php:93