@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class PhabricatorPagerUIExample extends PhabricatorUIExample {
4
5 public function getName() {
6 return pht('Pager');
7 }
8
9 public function getDescription() {
10 return pht(
11 'Use %s to create a control which allows '.
12 'users to paginate through large amounts of content.',
13 phutil_tag('tt', array(), 'PHUIPagerView'));
14 }
15
16 public function renderExample() {
17 $request = $this->getRequest();
18
19 $offset = (int)$request->getInt('offset');
20 $page_size = 20;
21 $item_count = 173;
22
23 $rows = array();
24 for ($ii = $offset; $ii < min($item_count, $offset + $page_size); $ii++) {
25 $rows[] = array(
26 pht('Item #%d', $ii + 1),
27 );
28 }
29
30 $table = new AphrontTableView($rows);
31 $table->setHeaders(
32 array(
33 'Item',
34 ));
35 $panel = new PHUIObjectBoxView();
36 $panel->setHeaderText(pht('Example'));
37 $panel->appendChild($table);
38
39 $panel->appendChild(
40 id(new PHUIInfoView())
41 ->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
42 ->setErrors(array(
43 pht(
44 'Use %s to render a pager element.',
45 phutil_tag('tt', array(), 'PHUIPagerView')),
46 )));
47
48 $pager = new PHUIPagerView();
49 $pager->setPageSize($page_size);
50 $pager->setOffset($offset);
51 $pager->setCount($item_count);
52 $pager->setURI($request->getRequestURI(), 'offset');
53 $panel->appendChild($pager);
54
55 $panel->appendChild(
56 id(new PHUIInfoView())
57 ->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
58 ->setErrors(array(
59 pht('You can show more or fewer pages of surrounding context.'),
60 )));
61
62 $many_pages_pager = new PHUIPagerView();
63 $many_pages_pager->setPageSize($page_size);
64 $many_pages_pager->setOffset($offset);
65 $many_pages_pager->setCount($item_count);
66 $many_pages_pager->setURI($request->getRequestURI(), 'offset');
67 $many_pages_pager->setSurroundingPages(7);
68 $panel->appendChild($many_pages_pager);
69
70 $panel->appendChild(
71 id(new PHUIInfoView())
72 ->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
73 ->setErrors(array(
74 pht(
75 'When it is prohibitively expensive or complex to attain a '.
76 'complete count of the items, you can select one extra item and '.
77 'set %s if it exists, creating an inexact pager.',
78 phutil_tag('tt', array(), 'hasMorePages(true)')),
79 )));
80
81 $inexact_pager = new PHUIPagerView();
82 $inexact_pager->setPageSize($page_size);
83 $inexact_pager->setOffset($offset);
84 $inexact_pager->setHasMorePages($offset < ($item_count - $page_size));
85 $inexact_pager->setURI($request->getRequestURI(), 'offset');
86 $panel->appendChild($inexact_pager);
87
88 return $panel;
89 }
90}