Zikula_Template_Plugins
[ class tree: Zikula_Template_Plugins ] [ index: Zikula_Template_Plugins ] [ all elements ]

Source for file function.pager.php

Documentation is available at function.pager.php

  1. <?php
  2. /**
  3.  * Zikula Application Framework
  4.  *
  5.  * @copyright (c) 2006, Zikula Development Team
  6.  * @link http://www.zikula.org
  7.  * @version $Id: function.pager.php 24342 2008-06-06 12:03:14Z markwest $
  8.  * @license GNU/GPL - http://www.gnu.org/copyleft/gpl.html
  9.  * @author Axel Guckelsberger
  10.  * @author Drak
  11.  * @package Zikula_Template_Plugins
  12.  * @subpackage Functions
  13.  */
  14.  
  15. /**
  16.  * pnRender pager plugin
  17.  *
  18.  * Examples (see also the demo page)
  19.  *   <!--[pager rowcount="400" limit="50"]-->
  20.  *   <!--[pager rowcount="400" limit="35" template="pageritems.html"]-->
  21.  *   <!--[pager rowcount="480" limit="90" template="pagerintervals.html" posvar="myposvar"]-->
  22.  *   <!--[pager rowcount="500" limit="47" template="pagerimage.html"]-->
  23.  *   <!--[pager rowcount="432" limit="25" template="pagercss.html"]-->
  24.  *   <!--[pager rowcount="1200" limit="40" maxpages="10"]-->
  25.  *   <!--[pager rowcount="1200" limit="40" template="pagercss.html" maxpages="7"]-->
  26.  *   <!--[pager rowcount="1200" limit="40" template="pagerjs.html" maxpages="10"]-->
  27.  *   <!--[pager rowcount="1200" limit="40" template="pagercss2.html" maxpages="20"]-->
  28.  *
  29.  * @param    int       $rowcount                - total number of items to page in between
  30.  *                                                 (if an array is assigned, it's count will be used)
  31.  * @param    int       $limit                   - number of items on a page (if <0 unlimited)
  32.  * @param    string    $posvar                  - name of the variable that contains the position data, eg "offset"
  33.  * @param    string    $template                - optional name of a template file
  34.  * @param    string    $includeStylesheet       - use predefined stylesheet file? Default is yes.
  35.  * @param    string    $anchorText              - optional text for hyperlink anchor (e.g. 'comments' for the anchor #comments) (default: '')
  36.  * @param    string    $maxpages                - optional maximum number of displayed pages, others will be hidden / suppressed
  37.  *                                                    (default: 0 = show all pages)
  38.  * @param    string    $display                 - optional choice from 'page' or 'startnum'. Show links using page number or starting item number
  39.  * @param    string    $class                   - optional class to apply to the pager container (default : pn-pager)
  40.  * @param    bool      $processDetailLinks      - should the single page links be processed? (default: false if using pagerimage.html, otherwise true)
  41.  */
  42. function smarty_function_pager($params&$smarty)
  43. {
  44.     if (!isset($params['rowcount'])) {
  45.         $smarty->trigger_error('pager: rowcount must be specified.');
  46.     }
  47.  
  48.     if (!isset($params['limit'])) {
  49.         $smarty->trigger_error('pager: limit must be specified.');
  50.     }
  51.  
  52.     if (is_array($params['rowcount'])) {
  53.         $params['rowcount'count($params['rowcount']);
  54.     elseif ($params['rowcount'== 0{
  55.         return '';
  56.     }
  57.  
  58.     if ($params['limit'== 0{
  59.         $params['limit'5;
  60.     }
  61.  
  62.     if (!isset($params['display'])) {
  63.         $params['display''startnum';
  64.     }
  65.  
  66.     if (!isset($params['class'])) {
  67.         $params['class''pn-pager';
  68.     }
  69.  
  70.     $pager array();
  71.     $pager['total'$params['rowcount'];
  72.     $pager['perpage'$params['limit'];
  73.     $pager['class'$params['class'];
  74.     unset($params['rowcount']);
  75.     unset($params['limit']);
  76.     unset($params['class']);
  77.  
  78.     // current position
  79.     $pager['posvar'(isset($params['posvar']$params['posvar''pos');
  80.     $pager['pos'= (int)FormUtil::getPassedValue($pager['posvar']'''GET');
  81.     if ($params['display'== 'page'{
  82.         $pager['pos'$pager['pos'$pager['perpage'];
  83.         $pager['increment'1;
  84.     else {
  85.         $pager['increment'$pager['perpage'];
  86.     }
  87.  
  88.     if ($pager['pos'1{
  89.         $pager['pos'1;
  90.     }
  91.     if ($pager['pos'$pager['total']{
  92.         $pager['pos'$pager['total'];
  93.     }
  94.     unset($params['posvar']);
  95.  
  96.     // number of pages
  97.     $pager['countPages'(isset($pager['total']&& $pager['total'ceil($pager['total'$pager['perpage']1);
  98.     if ($pager['countPages'2{
  99.         return '';
  100.     }
  101.  
  102.     // current page
  103.     $pager['currentPage'ceil($pager['pos'$pager['perpage']);
  104.     if ($pager['currentPage'$pager['countPages']{
  105.         $pager['currentPage'$pager['countPages'];
  106.     }
  107.  
  108.     $template (isset($params['template'])) $params['template''pagerimage.html';
  109.     $pager['includeStylesheet'= isset($params['includeStylesheet']$params['includeStylesheet'true;
  110.     $anchorText (isset($params['anchorText']'#' $params['anchorText''');
  111.     $pager['maxPages'(isset($params['maxpages']$params['maxpages'0);
  112.     unset($params['template']);
  113.     unset($params['anchorText']);
  114.     unset($params['maxpages']);
  115.  
  116.     $module FormUtil::getPassedValue('module'null'GETPOST');
  117.     $name   FormUtil::getPassedValue('name'null'GETPOST');
  118.  
  119.     $pager['func'FormUtil::getPassedValue('func''main''GETPOST');
  120.     $pager['type'FormUtil::getPassedValue('type''user''GETPOST');
  121.  
  122.     $pager['args'array();
  123.     if (empty($name&& empty($module)) {
  124.         $pager['module'pnConfigGetVar('startpage');
  125.         $starttype pnConfigGetVar('starttype');
  126.         $pager['type'!empty($starttype$starttype 'user';
  127.         $startfunc pnConfigGetVar('startfunc');
  128.         $pager['func'!empty($startfunc$startfunc 'main';
  129.  
  130.         $startargs   explode(','pnConfigGetVar('startargs'));
  131.         foreach ($startargs as $arg{
  132.             if (!empty($arg)) {
  133.                 $argument explode('='$arg);
  134.                 $pager['args'][$argument[0]] $argument[1];
  135.             }
  136.         }
  137.     }
  138.  
  139.     //also $_POST vars have to be considered, i.e. for search results
  140.     $allVars array_merge($_POST$_GET);
  141.     foreach ($allVars as $k => $v{
  142.         if ($k != $pager['posvar'&& !empty($v)) {
  143.             switch ($k{
  144.                 case 'module':
  145.                     $pager['module'$v;
  146.                     break;
  147.                 case 'func':
  148.                     $pager['func'$v;
  149.                     break;
  150.                 case 'type':
  151.                     $pager['type'$v;
  152.                     break;
  153.                 default:
  154.                     if (is_array($v)) {
  155.                         foreach ($v as $kk=>$vv{
  156.                             if (is_array($vv)) {
  157.                                 foreach ($vv as $kkk=>$vvv{
  158.                                     if (strlen($vvv)) {
  159.                                         $tkey $k '[' $kk '][' $kkk ']';
  160.                                         $pager['args'][$tkey$vvv;
  161.                                     }
  162.                                 }
  163.                             }
  164.                             else if (strlen($vv)) {
  165.                                 $tkey $k '[' $kk ']';
  166.                                 $pager['args'][$tkey=  $vv;
  167.                             }
  168.                         }
  169.                     }
  170.                     else {
  171.                         if (strlen($v)) {
  172.                             $pager['args'][$k=  $v;
  173.                         }
  174.                     }
  175.             }
  176.         }
  177.     }
  178.  
  179.     // build links to items / pages
  180.     // entries are marked as current or displayed / hidden
  181.     $pager['pages'array();
  182.     if ($pager['maxPages'0{
  183.         $pageInterval floor($pager['maxPages'2);
  184.  
  185.         $leftMargin $pager['currentPage'$pageInterval;
  186.         $rightMargin $pager['currentPage'$pageInterval;
  187.  
  188.         if ($leftMargin <= 1{
  189.             $rightMargin += abs($leftMargin);
  190.             $leftMargin 1;
  191.         }
  192.         if ($rightMargin >= ($pager['countPages'1)) {
  193.             $leftMargin -= abs($rightMargin ($pager['countPages'1));
  194.             $rightMargin ($pager['countPages'1);
  195.         }
  196.     }
  197.  
  198.     $pager['processDetailLinks'= isset($params['processDetailLinks']? (bool) $params['processDetailLinks'($template != 'pagerimage.html');
  199.     if ($pager['processDetailLinks']{
  200.         for ($currItem 1$currItem <= $pager['countPages']$currItem++{
  201.             $pager['pages'][$currItem]['pagenr'$currItem;
  202.             if ($params['display'== 'page'{
  203.                 $pager['args'][$pager['posvar']] $currItem;
  204.             else {
  205.                 $pager['args'][$pager['posvar']] (($currItem 1$pager['perpage']1;
  206.             }
  207.             $pager['pages'][$currItem]['url'DataUtil::formatForDisplay(pnModURL($pager['module']$pager['type']$pager['func']$pager['args']$anchorText);
  208.             $pager['pages'][$currItem]['isCurrentPage'($pager['pages'][$currItem]['pagenr'== $pager['currentPage']);
  209.  
  210.             $pager['pages'][$currItem]['isVisible'1;
  211.             if ($pager['maxPages'0
  212.             && ($pager['pages'][$currItem]['pagenr'$leftMargin && $pager['pages'][$currItem]['pagenr'1
  213.             || $pager['pages'][$currItem]['pagenr'$rightMargin && $pager['pages'][$currItem]['pagenr'$pager['countPages'])) {
  214.                 $pager['pages'][$currItem]['isVisible'0;
  215.             }
  216.         }
  217.         unset($pager['args'][$pager['posvar']]);
  218.     }
  219.  
  220.     // link to first & prev page
  221.     $pager['first'DataUtil::formatForDisplay('1');
  222.     $pager['args'][$pager['posvar']] $pager['first'];
  223.     $pager['firstUrl'DataUtil::formatForDisplay(pnModURL($pager['module']$pager['type']$pager['func']$pager['args']$anchorText);
  224.     if ($params['display'== 'page'{
  225.          $pager['prev'($pager['currentPage'1);
  226.     else {
  227.          $pager['prev'($pager['currentPage'1$pager['perpage'$pager['perpage'$pager['first'];
  228.     }
  229.     $pager['args'][$pager['posvar']] $pager['prev'];
  230.     $pager['prevUrl'DataUtil::formatForDisplay(pnModURL($pager['module']$pager['type']$pager['func']$pager['args']$anchorText);
  231.  
  232.     // link to next & last page
  233.     if ($params['display'== 'page'{
  234.          $pager['next'$pager['currentPage'1;
  235.     else {
  236.          $pager['next'$pager['currentPage'$pager['perpage'1;
  237.     }
  238.     $pager['args'][$pager['posvar']] $pager['next'];
  239.     $pager['nextUrl'DataUtil::formatForDisplay(pnModURL($pager['module']$pager['type']$pager['func']$pager['args']$anchorText);
  240.     if ($params['display'== 'page'{
  241.          $pager['last'$pager['countPages'];
  242.     else {
  243.          $pager['last'$pager['countPages'$pager['perpage'$pager['perpage'1;
  244.     }
  245.     $pager['args'][$pager['posvar']] $pager['last'];
  246.     $pager['lastUrl'DataUtil::formatForDisplay(pnModURL($pager['module']$pager['type']$pager['func']$pager['args']$anchorText);
  247.  
  248.     $pager['itemStart'($pager['currentPage'$pager['perpage']$pager['perpage'1;
  249.     $pager['itemEnd'$pager['itemStart'$pager['perpage'1;
  250.     if ($pager['itemEnd'$pager['total']{
  251.         $pager['itemEnd'$pager['total'];
  252.     }
  253.  
  254.     $pnr pnRender::getInstance('pnRender'false);
  255.  
  256.     $pnr->assign('pagerPluginArray'$pager);
  257.     $pnr->assign('hiddenPageBoxOpened'0);
  258.     $pnr->assign('hiddenPageBoxClosed'0);
  259.     return $pnr->fetch($template);
  260. }

Documentation generated on Fri, 18 Jul 2008 21:45:33 +0200 by phpDocumentor 1.4.1