]> git.andy128k.dev Git - ipf.git/commitdiff
Admin Pager
authoravl <alex.litovchenko@gmail.com>
Sun, 21 Sep 2008 05:03:49 +0000 (08:03 +0300)
committeravl <alex.litovchenko@gmail.com>
Sun, 21 Sep 2008 05:03:49 +0000 (08:03 +0300)
ipf/admin/model.php
ipf/admin/templates/admin/items.html
ipf/orm/pager/layoutarrows.php [new file with mode: 0644]

index 015a3cce1bc4f8c6b7200487110094d9386c1056..c4c7db88df98f56bfa46ee8269e4ff382de708af 100644 (file)
@@ -25,6 +25,7 @@ class IPF_Admin_Model{
     var $modelName = null;
     var $model = null;
     var $inlineInstances = array();
+    var $perPage = 50;
 
     public function __construct($modelName){
         $this->modelName = $modelName;
@@ -82,7 +83,7 @@ class IPF_Admin_Model{
         if (method_exists($this,'list_display'))
             $this->names = $this->list_display();
         else
-            $this->names = $this->qe->getTable()->getColumnNames();
+            $this->names = $this->model->getTable()->getColumnNames();
             
         foreach ($this->names as $name){
             $this->header[$name] = new IPF_Template_ContextVars(array(
@@ -141,7 +142,7 @@ class IPF_Admin_Model{
     }
     
     protected function UrlForResult($o){
-        return  $o->__get($this->qe->getTable()->getIdentifier()).'/';
+        return  $o->__get($this->model->getTable()->getIdentifier()).'/';
     }
 
     protected function _getForm($model_obj, $data, $extra){
@@ -253,13 +254,25 @@ class IPF_Admin_Model{
 
     public function ListItems($request){
         $this->ListItemsQuery();
-        $this->qe = $this->q->execute();
         $this->ListItemsHeader();
+        
+        $currentPage = (int)$request->GET['page'];
+        
+        $pager = new IPF_ORM_Pager_LayoutArrows(
+            new IPF_ORM_Pager($this->q, $currentPage, $this->perPage),
+            new IPF_ORM_Pager_Range_Sliding(array('chunk' => 10)),
+            '?page={%page_number}'
+        );
+        $pager->setTemplate('<a href="{%url}">{%page}</a> ');
+        $pager->setSelectedTemplate('<span class="this-page">{%page}</span> ');
+        $objects = $pager->getPager()->execute();
+        
         $context = array(
             'page_title'=>$this->modelName.' List', 
             'header'=>$this->header,
             'classname'=>$this->modelName,
-            'objects'=>$this->qe,
+            'objects'=>$objects,
+            'pager'=>$pager,
             'classname'=>$this->modelName,
             'perms'=>$this->getPerms($request),
         );
index e42317db340c376fa7fa3198ec282e078e5b1885..e46722f3b678493f3bb5014423ed37bf4ec997cf 100644 (file)
@@ -27,6 +27,9 @@
                 {/foreach}
             </tbody>
         </table>
+        <p class="paginator">
+            {$pager->display()|safe} {$pager->getPager()->getNumResults()} {$classname}
+        </p>
     </div>
 </div>
 
diff --git a/ipf/orm/pager/layoutarrows.php b/ipf/orm/pager/layoutarrows.php
new file mode 100644 (file)
index 0000000..0acfbc0
--- /dev/null
@@ -0,0 +1,39 @@
+<?php
+
+class IPF_ORM_Pager_LayoutArrows extends IPF_ORM_Pager_Layout
+{
+    public function display($options = array(), $return = true)
+    {
+        $pager = $this->getPager();
+        $str = '';
+
+        // First page
+        $this->addMaskReplacement('page', '&laquo;', true);
+        $options['page_number'] = $pager->getFirstPage();
+        $str .= $this->processPage($options);
+
+        // Previous page
+        $this->addMaskReplacement('page', '&lsaquo;', true);
+        $options['page_number'] = $pager->getPreviousPage();
+        $str .= $this->processPage($options);
+
+        // Pages listing
+        $this->removeMaskReplacement('page');
+        $str .= parent::display($options, true);
+
+        // Next page
+        $this->addMaskReplacement('page', '&rsaquo;', true);
+        $options['page_number'] = $pager->getNextPage();
+        $str .= $this->processPage($options);
+
+        // Last page
+        $this->addMaskReplacement('page', '&raquo;', true);
+        $options['page_number'] = $pager->getLastPage();
+        $str .= $this->processPage($options);
+
+        if ($return)
+            return $str;
+
+        echo $str;    
+    }
+}