developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Ticket #922: 922-pageslinks-2.diff

File 922-pageslinks-2.diff, 8.2 KB (added by Surfoo, 11 years ago)
  • lib/jelix/plugins/tpl/html/function.pagelinks.php

     
    44* @subpackage jtpl_plugin
    55* @author     Jouanneau Laurent
    66* @copyright  2007 Jouanneau laurent
    7 * @contributor Christian Tritten (christian.tritten@laposte.net)
    8 * @copyright  2007 Christian Tritten
     7* @contributor Christian Tritten (christian.tritten@laposte.net), Baptiste Toinot
     8* @copyright  2007 Christian Tritten, 2009 Baptiste Toinot
    99* @link        http://www.jelix.org
    1010* @licence    GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
    1111*/
     
    1919 * @param integer $itemsTotal number of items
    2020 * @param integer $offset  index of the first item to display
    2121 * @param integer $pageSize  items number in a page
    22  * @param string $paramName name of the parameter in the actionParams which will content a page offset
     22 * @param array $params name of the parameters in the actionParams which will content a page offset
    2323 * @param array $displayProperties properties for the links display
    2424 *  */
    2525function jtpl_function_html_pagelinks($tpl, $action, $actionParams, $itemsTotal, $offset, $pageSize = 15,
    26                                       $paramName = 'offset', $displayProperties = array())
    27 {
    28     $offset = intval($offset);
    29     if ($offset <= 0)
     26                                      $params = 'offset', $displayProperties = array())
     27{
     28    $defaultBehavior = array('page', 'offset');
     29   
     30    if ($offset <= 0) {
    3031        $offset = 0;
     32    }
    3133
    3234    $itemsTotal = intval($itemsTotal);
    3335
    3436    $pageSize = intval($pageSize);
    35     if ($pageSize < 1)
    36         $pageSize = 1;
    37 
    38     // If there are at least two pages of results
    39     if ($itemsTotal > $pageSize) {
    40         $jUrlEngine = jUrl::getEngine();
    41 
    42         $urlaction = jUrl::get($action, $actionParams, jUrl::JURLACTION);
    43 
    44         $defaultDisplayProperties = array('start-label' => '|&lt;',
    45                                           'prev-label'  => '&lt;',
    46                                           'next-label'  => '&gt;',
    47                                           'end-label'   => '&gt;|',
    48                                           'area-size'   => 0);
    49 
    50         if (is_array($displayProperties) && count($displayProperties) > 0)
    51             $displayProperties = array_merge($defaultDisplayProperties, $displayProperties);
    52         else
    53             $displayProperties = $defaultDisplayProperties;
    54 
    55         $pages = array();
    56 
    57         $currentPage = 1;
     37    if ($pageSize <= 1) {
     38        $pageSize = 15;
     39    }
     40   
     41    // calculation of total pages
     42    $pagesTotal = ceil($itemsTotal/$pageSize);
     43    if ($pagesTotal <= 1) {
     44        return false;
     45    }
     46   
     47    if(is_array($params)) {
     48        if(!empty($params['paramName'])) {
     49            $paramName = $params['paramName'];
     50        }
     51        $behavior = $defaultBehavior[0];
     52        if(!empty($params['behavior']) && in_array($params['behavior'], $defaultBehavior)) {
     53            $behavior = $params['behavior'];
     54        }
     55    } else { // Old behavior for compatibility
     56        $behavior = $defaultBehavior[1];
     57        $paramName = $params;
     58    }
     59       
     60    $jUrlEngine = jUrl::getEngine();
    5861
    59         $numpage = 1;
     62    $urlaction = jUrl::get($action, $actionParams, jUrl::JURLACTION);
    6063
    61         $prevBound = 0;
     64    $defaultDisplayProperties = array('start-label' => '&laquo;',
     65                                      'prev-label'  => '&lsaquo;',
     66                                      'next-label'  => '&rsaquo;',
     67                                      'end-label'   => '&raquo;',
     68                                      'area-size'   => 0);
     69    if (is_array($displayProperties) && count($displayProperties) > 0) {
     70        $displayProperties = array_merge($defaultDisplayProperties, $displayProperties);
     71    } else {
     72        $displayProperties = $defaultDisplayProperties;
     73    }
    6274
    63         $nextBound = 0;
     75    $pages = array();
     76    $numpage = 1;
     77    $prevBound = 0;
     78    $nextBound = 0;
     79   
     80    // If there are at least two pages of results
     81    if ($behavior == "offset") {
     82        $currentPage = false;
    6483
    6584        // Generates list of page offsets
    6685        for($curidx = 0; $curidx < $itemsTotal; $curidx += $pageSize) {
     
    7493                $url = $jUrlEngine->create($urlaction);
    7594                $pages[$numpage] = '<li><a href="'.$url->toString(true).'">'.$numpage.'</a></li>';
    7695            }
    77             $numpage++;
     96            ++$numpage;
    7897        }
    7998
    8099        // Calculate start page url
     
    149168        }
    150169
    151170        echo '</ul>';
     171    } else if ($behavior == "page") {
     172        $currentPage = $offset;
     173
     174        // Generates list of page
     175        for($x = 1; $x <= $pagesTotal; ++$x) {
     176            if($currentPage == $x) {
     177                $pages[$numpage] = '<li class="pagelinks-current">'.$numpage.'</li>';
     178                $prevBound = $x - 1;
     179                $nextBound = $x + 1;
     180                $currentPage = $numpage;
     181            } else {
     182                $urlaction->params[$paramName] = $x;
     183                $url = $jUrlEngine->create($urlaction);
     184                $pages[$numpage] = '<li><a href="'.$url->toString(true).'">'.$numpage.'</a></li>';
     185            }
     186            ++$numpage;
     187        }
     188
     189        // Calculate start page url
     190        $urlaction->params[$paramName] = 1;
     191        $urlStartPage = $jUrlEngine->create($urlaction);
     192
     193        // Calculate previous page url
     194        $urlaction->params[$paramName] = $prevBound;
     195        $urlPrevPage = $jUrlEngine->create($urlaction);
     196
     197        // Calculate next page url
     198        $urlaction->params[$paramName] = $nextBound;
     199        $urlNextPage = $jUrlEngine->create($urlaction);
     200
     201        // Calculate end page url
     202        $urlaction->params[$paramName] = count($pages);
     203        $urlEndPage = $jUrlEngine->create($urlaction);
     204
     205
     206        // Links display
     207        echo '<ul class="pagelinks">';
     208
     209        // Start link
     210        if (!empty($displayProperties['start-label'])) {
     211            echo '<li class="pagelinks-start';
     212            if ($prevBound >= 1) {
     213                echo '"><a href="', $urlStartPage->toString(true), '">', $displayProperties['start-label'], '</a>';
     214            } else {
     215                echo ' pagelinks-disabled">',$displayProperties['start-label'] ;
     216            }
     217            echo '</li>', "\n";
     218        }
     219
     220        // Previous link
     221        if (!empty($displayProperties['prev-label'])) {
     222            echo '<li class="pagelinks-prev';
     223            if ($prevBound >= 1) {
     224                echo '"><a href="', $urlPrevPage->toString(true), '">', $displayProperties['prev-label'], '</a>';
     225            } else {
     226                echo ' pagelinks-disabled">',$displayProperties['prev-label'] ;
     227            }
     228            echo '</li>', "\n";
     229        }
     230
     231        // Pages links
     232        foreach ($pages as $key => $page) {
     233            if ($displayProperties['area-size'] == 0 || ($currentPage - $displayProperties['area-size'] <= $key)
     234                && ($currentPage + $displayProperties['area-size'] >= $key))
     235                echo $page, "\n";
     236        }
     237
     238        // Next link
     239        if (!empty($displayProperties['next-label'])) {
     240            echo '<li class="pagelinks-next';
     241            if ($nextBound <= $pagesTotal) {
     242                echo '"><a href="', $urlNextPage->toString(true), '">', $displayProperties['next-label'], '</a>';
     243            } else {
     244                echo ' pagelinks-disabled">',$displayProperties['next-label'] ;
     245            }
     246            echo '</li>', "\n";
     247        }
     248
     249        // End link
     250        if (!empty($displayProperties['end-label'])) {
     251            echo '<li class="pagelinks-end';
     252            if ($nextBound <= $pagesTotal) {
     253                echo '"><a href="', $urlEndPage->toString(true), '">', $displayProperties['end-label'], '</a>';
     254            } else {
     255                echo ' pagelinks-disabled">',$displayProperties['end-label'] ;
     256            }
     257            echo '</li>', "\n";
     258        }
     259
     260        echo '</ul>';
    152261    }
    153     else echo '<ul class="pagelinks"><li class="pagelinks-current">1</li></ul>';
    154262}