use a real pager now
authorChristian Weiske <cweiske@cweiske.de>
Fri, 4 May 2012 07:51:22 +0000 (09:51 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Fri, 4 May 2012 07:51:22 +0000 (09:51 +0200)
data/templates/list.htm
data/templates/pager.htm [new file with mode: 0644]
data/templates/search.htm
src/phorkie/Html/Pager.php [new file with mode: 0644]
src/phorkie/Repositories.php
www/list.php
www/search.php
www/www-header.php

index b92e5882873287653b601c0c708b72c1cc1a78d5..d0732ea45b48d464d21e807656eea9960e80e304 100644 (file)
@@ -8,24 +8,6 @@
 {% endfor %}
 </ul>
 
-<ul class="pager">
- {% if links.prev %}
- <li class="previous">
-  <a href="{{links.prev}}">&larr; prev</a>
- </li>
- {% else %}
- <li class="previous disabled">
-  <a href="#">&larr; prev</a>
- </li>
- {% endif %}
- {% if links.next %}
- <li class="next">
-  <a href="{{links.next}}">next &rarr;</a>
- </li>
- {% else %}
- <li class="next disabled">
-  <a href="#">next &rarr;</a>
- </li>
- {% endif %}
-</ul>
+ {% include 'pager.htm' %}
+
 {% endblock %}
diff --git a/data/templates/pager.htm b/data/templates/pager.htm
new file mode 100644 (file)
index 0000000..085a281
--- /dev/null
@@ -0,0 +1,48 @@
+{% set links = pager.getLinks() %}
+{% if pager.numPages > 1 %}
+<div class="pagination pagination-centered">
+<ul>
+ {% if links.first %}
+ <li>
+  {{links.first|raw}}
+ </li>
+ {% else %}
+ <li class="disabled"><a href="#">first</a></li>
+ {% endif %}
+ {% if links.back %}
+ <li>
+  {{links.back|raw}}
+ </li>
+ {% else %}
+ <li class="disabled"><a href="#">« prev</a></li>
+ {% endif %}
+
+ {% for page in links.pages %}
+  {% if page|length <= 3 %}
+ <li class="active">
+  <a href="#">{{page|raw}}</a>
+ </li>
+  {% else %}
+ <li>
+  {{page|raw}}
+ </li>
+  {% endif %}
+ {% endfor %}
+
+ {% if links.next %}
+ <li>
+  {{links.next|raw}}
+ </li>
+ {% else %}
+ <li class="disabled"><a href="#">next »</a></li>
+ {% endif %}
+ {% if links.last %}
+ <li>
+  {{links.last|raw}}
+ </li>
+ {% else %}
+ <li class="disabled"><a href="#">last</a></li>
+ {% endif %}
+</ul>
+</div>
+{% endif %}
\ No newline at end of file
index 39350c0577544230a6d4974e2c9b782ce0bc40cd..074b5e6a698b85db23a476e70ac5cbd63af51e3c 100644 (file)
@@ -15,7 +15,7 @@
    {% include 'repo-list.htm' %}
  {% endfor %}
  </ul>
- {{pager.getLinks.all|raw}}
+ {% include 'pager.htm' %}
 {% endif %}
 
 {% endblock %}
diff --git a/src/phorkie/Html/Pager.php b/src/phorkie/Html/Pager.php
new file mode 100644 (file)
index 0000000..f5c8105
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+namespace phorkie;
+
+class Html_Pager
+{
+    protected $pager;
+
+    /**
+     * @param integer $currentPage Current page, beginning with 1
+     */
+    public function __construct($itemCount, $perPage, $currentPage, $filename)
+    {
+        //fix non-static factory method error
+        error_reporting(error_reporting() & ~E_STRICT);
+        $this->pager = \Pager::factory(
+            array(
+                'mode'        => 'Sliding',
+                'perPage'     => $perPage,
+                'delta'       => 2,
+                'totalItems'  => $itemCount,
+                'currentPage' => $currentPage,
+                'urlVar'      => 'page',
+                'append'      => false,
+                'path'        => '/',
+                'fileName'    => $filename,
+                'separator'   => '###',
+                'spacesBeforeSeparator' => 0,
+                'spacesAfterSeparator' => 0,
+                'curPageSpanPre' => '',
+                'curPageSpanPost' => '',
+                'firstPagePre' => '',
+                'firstPageText' => 'first',
+                'firstPagePost' => '',
+                'lastPagePre' => '',
+                'lastPageText' => 'last',
+                'lastPagePost' => '',
+                'prevImg' => '« prev',
+                'nextImg' => 'next »',
+            )
+        );
+    }
+
+
+    public function getLinks()
+    {
+        $arLinks = $this->pager->getLinks();
+        $arLinks['pages'] = explode('###', $arLinks['pages']);
+        return $arLinks;
+    }
+
+    public function numPages()
+    {
+        return $this->pager->numPages();
+    }
+}
+
+?>
index dc3387bcc1faad481c6061e67c7b7a90025bbb64..dc26a171eebecafc575d0325bc8c78e353726f4c 100644 (file)
@@ -38,7 +38,7 @@ class Repositories
      * @param integer $page    Page number, beginning with 0
      * @param integer $perPage Number of repositories per page
      *
-     * @return array Array of Repositories
+     * @return array Array of Repositories first, number of repositories second
      */
     public function getList($page = 0, $perPage = 10)
     {
@@ -53,7 +53,7 @@ class Repositories
             $r->loadById(substr($oneDir, 0, -4));
             $repos[] = $r;
         }
-        return $repos;
+        return array($repos, count($dirs));
     }
 }
 
index a75fda894356bfe15939cbcf682d724e3e64132d..911f26d1a728b54dcb7a9d22d452cae65d539dc6 100644 (file)
@@ -11,28 +11,21 @@ if (isset($_GET['page'])) {
     if (!is_numeric($_GET['page'])) {
         throw new Exception_Input('List page is not numeric');
     }
-    $page = (int)$_GET['page'];
+    $page = (int)$_GET['page'] - 1;
 }
 
 $perPage = 10;
-$repos = $rs->getList($page, $perPage);
+list($repos, $repoCount) = $rs->getList($page, $perPage);
 
-$links = array('prev' => null, 'next' => null);
-if ($page > 0) {
-    $links['prev'] = '/list/' . ($page - 1);
-    if ($page - 1 == 0) {
-        $links['prev'] = '/list';
-    }
-}
-if (count($repos) && count($repos) == $perPage) {
-    $links['next'] = '/list/' . ($page + 1);
-}
+$pager = new Html_Pager(
+    $repoCount, $perPage, $page + 1, '/list/%d'
+);
 
 render(
     'list',
     array(
         'repos' => $repos,
-        'links' => $links,
+        'pager' => $pager,
     )
 );
 ?>
index 9461b0dd7eb83a53cc0c22004bacfc96d23e18b1..cb72c6aa8c64cfacd1980b7354127a61d1631ce9 100644 (file)
@@ -26,21 +26,9 @@ $search = $db->getSearch();
 
 $sres = $search->search($query, $page, $perPage);
 
-//fix non-static factory method error
-error_reporting(error_reporting() & ~E_STRICT);
-$pager = \Pager::factory(
-    array(
-        'mode'        => 'Sliding',
-        'perPage'     => 10,
-        'delta'       => 2,
-        'totalItems'  => $sres->getResults(),
-        'currentPage' => $page + 1,
-        'urlVar'      => 'page',
-        'path'        => '/',
-        'fileName'    => $sres->getLink($query),
-    )
+$pager = new Html_Pager(
+    $sres->getResults(), $perPage, $page + 1, $sres->getLink($query)
 );
-
 render(
     'search',
     array(
index f381872691f67a29140c67fb6a488600e36e587c..c0b18d35b54b4de06057fa0d837ea14f8f5a7d73 100644 (file)
@@ -56,6 +56,7 @@ $twig = new \Twig_Environment(
         'debug' => true
     )
 );
+//$twig->addExtension(new \Twig_Extension_Debug());
 
 function render($tplname, $vars)
 {