Wiki source code of Pagination

Last modified by Vincent Massol on 2017/09/04

Show last authors
1 {{box cssClass="floatinginfobox" title="**Contents**"}}
2 {{toc/}}
3 {{/box}}
4
5 {{info}}
6 This was committed in 1.9RC1. See [[this Jira issue>>https://jira.xwiki.org/browse/XWIKI-3880]] for details.
7 {{/info}}
8
9 = Example =
10
11 See [[ListWebSearch>>http://incubator.myxwiki.org/xwiki/bin/view/Main/ListWebSearch]]
12
13 == Upper navigation ==
14
15 [[image:Example-UpperNavigation.png||width="950"]]
16
17 == CSS ==
18
19 Filters CSS:
20
21 {{code}}
22 .searchFilters{
23 clear: both;
24 font-size: 90%;
25 }
26 #sortFilter{
27 color: #888;
28 padding: 5px;
29 line-height: 16px;
30 }
31 #sortFilter a.sortType{
32 color: #888;
33 }
34 #sortFilter a.sortType:hover{
35 color: #4D4D4D;
36 }
37 #sortFilter a#currentSort{
38 color: #4D4D4D;
39 font-weight: bold;
40 }
41 #sortFilter a.sortType:focus,
42 #sortFilter a#currentSort:focus {
43 outline: dotted 1px #000;
44 }
45 {{/code}}
46
47 Pagination with number of result pages displayed:
48
49 {{code}}
50 .paginationFilter {
51 color: #888;
52 height: 100%;
53 border-top: 1px solid #CCCCCC;
54 padding: 2px 0px 5px 5px;
55 display: block;
56 line-height: 22px;
57 }
58 .resultsNo{
59 float: left;
60 }
61 .resultsNo .currentResultsNo, .resultsNo .totalResultsNo{
62 color: #888;
63 }
64 .pagination{
65 float: right;
66 margin-right: 10px;
67 }
68 .pagination a{
69 color: #888;
70 }
71 .pagination a:hover{
72 color: #4D4D4D;
73 }
74 .pagination a.currentPagination{
75 color: #4D4D4D;
76 font-weight: bold;
77 }
78 .pagination a:focus {
79 outline: dotted 1px #000;
80 }
81 .controlPagination{
82 position:relative;
83 width:42px;
84 height:22px;
85 overflow:hidden;
86 margin:0!important;
87 padding:0!important;
88 float: right;
89 }
90 .controlPagination a{
91 position:absolute;
92 top:0;
93 left:0;
94 line-height:25px;
95 outline:none;
96 overflow:hidden;
97 border:none;
98 }
99 .controlPagination a.prevPagination ,
100 .controlPagination a.noPrevPagination,
101 .controlPagination a.nextPagination,
102 .controlPagination a.noNextPagination {
103 background-image:url($xwiki.getSkinFile("navigation.png"));
104 width: 21px;
105 height: 22px;
106 }
107 .controlPagination a.prevPagination {
108 background-position:left top;
109 }
110 .controlPagination a.noPrevPagination{
111 background-position:left bottom;
112 }
113 .controlPagination a.nextPagination {
114 background-position:right top;
115 left: 21px;
116 }
117 .controlPagination a.noNextPagination {
118 background-position:right bottom;
119 left: 21px;
120 }
121 {{/code}}
122
123 == HTML Code ==
124
125 {{code}}
126 <div class="searchFilters">
127
128 <div id="sortFilter">
129 $msg.get("xe.search.filters.sort")
130 <a href="" id="currentSort" title="$msg.get('xe.search.filters.relevance.title')">$msg.get("xe.search.filters.relevance")</a>
131 <a href="" class="sortType" title="$msg.get('xe.search.filters.date.title')">$msg.get("xe.search.filters.date")</a>
132 <a href="" class="sortType" title="$msg.get('xe.search.filters.rating.title')">$msg.get("xe.search.filters.rating")</a>
133 <a href="" class="sortType" title="$msg.get('xe.search.filters.popularity.title')">$msg.get("xe.search.filters.popularity")</a>
134 </div>
135
136 <div class="paginationFilter">
137
138 <span class="resultsNo">$msg.get("xe.pagination.results") <span class="currentResultsNo">6-30</span> $msg.get("xe.pagination.results.of") <span class="totalResultsNo">50</span></span>
139
140 <span class="controlPagination">
141 <a href="#" title="$msg.get('xe.pagination.page.prev.title')" class="prevPagination"></a>
142 <a href="#" title="$msg.get('xe.pagination.page.next.title')" class="nextPagination"></a>
143 </span>
144 <span class="pagination">$msg.get("xe.pagination.page")
145 <a href="" title="$msg.get('xe.pagination.page.title',['1'])">1</a>
146 <a href="" class="currentPagination" title="$msg.get('xe.pagination.page.title',['2'])">2</a>
147 <a href="" title="$msg.get('xe.pagination.page.title',['3'])">3</a>
148 <a href="" title="$msg.get('xe.pagination.page.title',['4'])">4</a>
149 <a href="" title="$msg.get('xe.pagination.page.title',['5'])">5</a>
150 <a href="" title="$msg.get('xe.pagination.page.title',['6'])">6</a>
151 <a href="" title="$msg.get('xe.pagination.page.title',['7'])">7</a>
152 <a href="" title="$msg.get('xe.pagination.page.title',['8'])">8</a>
153 <a href="" title="$msg.get('xe.pagination.page.title',['9'])">9</a>
154 </span>
155 </div>
156 </div>
157 {{/code}}
158
159 = Bottom Navigation =
160
161 [[image:Example-BottomNavigation.png||width="950"]]
162
163 This is a lighter version of the Upper Navigation, keeping only the pagination controls.
164
165 == CSS ==
166
167 Container:
168
169 {{code}}
170 .paginationFooter{
171 display: block;
172 clear: both;
173 text-align: right;
174 font-size: 90%;
175 }
176 {{/code}}
177
178 Same as in Upper navigation (don't apply if both navigations are present):
179
180 {{code}}
181 .paginationFilter {
182 color: #888;
183 height: 100%;
184 border-top: 1px solid #CCCCCC;
185 padding: 2px 0px 5px 5px;
186 display: block;
187 line-height: 22px;
188 }
189 .pagination{
190 float: right;
191 margin-right: 10px;
192 }
193 .pagination a{
194 color: #888;
195 }
196 .pagination a:hover{
197 color: #4D4D4D;
198 }
199 .pagination a.currentPagination{
200 color: #4D4D4D;
201 font-weight: bold;
202 }
203 .pagination a:focus {
204 outline: dotted 1px #000;
205 }
206 .controlPagination{
207 position:relative;
208 width:42px;
209 height:22px;
210 overflow:hidden;
211 margin:0!important;
212 padding:0!important;
213 float: right;
214 }
215 .controlPagination a{
216 position:absolute;
217 top:0;
218 left:0;
219 line-height:25px;
220 outline:none;
221 overflow:hidden;
222 border:none;
223 }
224 .controlPagination a.prevPagination ,
225 .controlPagination a.noPrevPagination,
226 .controlPagination a.nextPagination,
227 .controlPagination a.noNextPagination {
228 background-image:url($xwiki.getSkinFile("navigation.png"));
229 width: 21px;
230 height: 22px;
231 }
232 .controlPagination a.prevPagination {
233 background-position:left top;
234 }
235 .controlPagination a.noPrevPagination{
236 background-position:left bottom;
237 }
238 .controlPagination a.nextPagination {
239 background-position:right top;
240 left: 21px;
241 }
242 .controlPagination a.noNextPagination {
243 background-position:right bottom;
244 left: 21px;
245 }
246 {{/code}}
247
248 == HTML Code ==
249
250 {{code}}
251 <div class="paginationFooter">
252 <div class="paginationFilter">
253 <span class="controlPagination">
254 <a href="#" title="$msg.get('xe.pagination.page.prev.title')" class="noPrevPagination"></a>
255 <a href="#" title="$msg.get('xe.pagination.page.next.title')" class="noNextPagination"></a>
256 </span>
257 <span class="pagination">
258 $msg.get("xe.pagination.page")
259 <a href="" title="$msg.get('xe.pagination.page.title',['1'])">1</a>
260 <a href="" class="currentPagination" title="$msg.get('xe.pagination.page.title',['2'])">2</a>
261 <a href="" title="$msg.get('xe.pagination.page.title',['3'])">3</a>
262 <a href="" title="$msg.get('xe.pagination.page.title',['4'])">4</a>
263 <a href="" title="$msg.get('xe.pagination.page.title',['5'])">5</a>
264 <a href="" title="$msg.get('xe.pagination.page.title',['6'])">6</a>
265 <a href="" title="$msg.get('xe.pagination.page.title',['7'])">7</a>
266 <a href="" title="$msg.get('xe.pagination.page.title',['8'])">8</a>
267 <a href="" title="$msg.get('xe.pagination.page.title',['9'])">9</a>
268 </span>
269 </div>
270 </div>
271 {{/code}}
272
273 = Dependencies =
274
275 == Icons ==
276
277 [[image:navigation.png]]
278
279 == Translations ==
280
281 === Sort Translations ===
282
283 {{code}}
284 xe.search.filters.sort=Sort:
285 xe.search.filters.relevance=Relevance
286 xe.search.filters.relevance.title=Sort by Relevance
287 xe.search.filters.date=Date
288 xe.search.filters.date.title=Sort by Date
289 xe.search.filters.rating=Rating
290 xe.search.filters.rating.title=Sort by Rating
291 xe.search.filters.popularity=Popularity
292 xe.search.filters.popularity.title=Sort by Popularity
293 {{/code}}
294
295 === Navigation Translations ===
296
297 {{code}}
298 xe.pagination.results=Results
299 xe.pagination.results.of=out of
300 xe.pagination.page=Page
301 xe.pagination.page.title=Page {0}
302 xe.pagination.page.prev.title=Previous Page
303 xe.pagination.page.next.title=Next Page
304 {{/code}}
305
306 = Velocity Macro =
307
308 {{code language="none"}}
309 #pagination($parameters)
310 {{/code}}
311
312 The macro is responsible for displaying browsing links, and does not involve the actual display of the browsed items.
313
314 It accepts a single argument, which in turn is a map of parameters:
315
316 ; url
317 : The base url of the document displaying the collection.
318 : Default: {{velocity}}$doc.getURL('view'){{/velocity}}
319 ; totalItems
320 : The total number number of items in the collection.
321 : Default: none, this parameter is mandatory.
322 ; defaultItemsPerPage
323 : The number of items per page. This value is overwritten by the request parameter "perPage", if it exists and has a valid positive integer value.
324 : Default: 20
325 ; position
326 : The placement of the pagination widget. Supported values: "top", "bottom". The bottom widget only displays pages, while the top widget also provides a information about the item range on the current page.
327 : Default: top
328 ; itemParamName
329 : The name of the request parameter for the index of the first displayed item.
330 : Default: firstIndex
331 ; itemsPerPageParamName
332 : The name of the request parameter for the number of items displayed on a page.
333 : Default: perPage
334
335 Usage example:
336
337 {{code language="none"}}
338 #set($paginationParameters = {
339 'url' : $doc.getURL('view', "text=${query}"),
340 'totalItems' : $searchresults.getHitcount(),
341 'defaultItemsPerPage' : $defaultItemsPerPage,
342 'position': 'top'
343 })
344 #pagination($paginationParameters)
345 {{/code}}
346
347 == Example ==
348
349 The pagination macro can be used for example to display the latest modifications of the current user:
350
351 {{code}}
352
353 #set($ok = $xwiki.jsfx.use("uicomponents/search/search.js", true))
354 #set($ok = $xwiki.ssfx.use("uicomponents/search/search.css", true))
355 ##
356 ## set display parameters for the list
357 ##
358 #set($defaultItemsPerPage = 10)
359 #set($orderClause = "order by doc.date desc")
360 #set($whereClause = "where 1=1 and doc.author='$context.user'")
361 #set($results_url = $doc.getURL('view'))
362 #set($totalItems = $xwiki.countDocuments($whereClause))
363 #if($totalItems > 0)
364 ## -----------------
365 ## Pagination (top)
366 ## -----------------
367 #set($paginationParameters = {'url' : $results_url, 'totalItems' : $totalItems, 'defaultItemsPerPage' : $defaultItemsPerPage, 'position': 'top'})
368 #pagination($paginationParameters)
369 ## -----------------
370 ## Display results
371 ## -----------------
372 #set($firstIndex = "$!{paginationParameters.firstItem}")
373 #if($firstIndex == '')
374 #set($firstIndex = "$!request.getParameter('firstIndex')")
375 #if($firstIndex == '')
376 #set($firstIndex = '0')
377 #end
378 #end
379 #set($firstIndex = $util.parseInt($firstIndex))
380 #set($results = $xwiki.searchDocuments("$whereClause $orderClause", $defaultItemsPerPage, $firstIndex))
381 #set ($list = $results)
382 #set ($isScored = false)
383 #includeInContext("XWiki.Results")
384 ## -----------------
385 ## Pagination (bottom)
386 ## -----------------
387 #set($paginationParameters.position = 'bottom')
388 #pagination($paginationParameters)
389 #end
390 {{/code}}
391
392 {{velocity}}
393 #if(!$isGuest)
394 #set($ok = $xwiki.jsfx.use("uicomponents/search/search.js", true))
395 #set($ok = $xwiki.ssfx.use("uicomponents/search/search.css", true))
396 ##
397 ## set display parameters for the list
398 ##
399 #set($defaultItemsPerPage = 10)
400 #set($orderClause = "order by doc.date desc")
401 #set($whereClause = "where 1=1 and doc.author='$context.user'")
402 #set($results_url = $doc.getURL('view'))
403 #set($totalItems = $xwiki.countDocuments($whereClause))
404 #if($totalItems > 0)
405 ## -----------------
406 ## Pagination (top)
407 ## -----------------
408 #set($paginationParameters = {'url' : $results_url, 'totalItems' : $totalItems, 'defaultItemsPerPage' : $defaultItemsPerPage, 'position': 'top'})
409 {{html wiki="true" clean="false"}}
410 #pagination($paginationParameters)
411 {{/html}}
412 ## -----------------
413 ## Display results
414 ## -----------------
415 #set($firstIndex = "$!{paginationParameters.firstItem}")
416 #if($firstIndex == '')
417 #set($firstIndex = "$!request.getParameter('firstIndex')")
418 #if($firstIndex == '')
419 #set($firstIndex = '0')
420 #end
421 #end
422 #set($firstIndex = $util.parseInt($firstIndex))
423 #set($results = $xwiki.searchDocuments("$whereClause $orderClause", $defaultItemsPerPage, $firstIndex))
424 #set ($list = $results)
425 #set ($isScored = false)
426 {{include document="XWiki.Results"/}}
427 ## -----------------
428 ## Pagination (bottom)
429 ## -----------------
430 #set($paginationParameters.position = 'bottom')
431 {{html wiki="true" clean="false"}}
432 #pagination($paginationParameters)
433 {{/html}}
434 #end
435 #end
436 {{/velocity}}

Get Connected