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-pagelinks.diff

File 922-pagelinks.diff, 8.3 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*/
     
    1717 * @param string $action selector of the action
    1818 * @param array $actionParams parameters for the action
    1919 * @param integer $itemsTotal number of items
    20  * @param integer $offset  index of the first item to display
    21  * @param integer $pageSize  items number in a page
     20 * @param integer $currentPage current page displayed
     21 * @param integer $pageSize items number in a page
    2222 * @param string $paramName name of the parameter in the actionParams which will content a page offset
    2323 * @param array $displayProperties properties for the links display
    2424 *  */
    25 function jtpl_function_html_pagelinks($tpl, $action, $actionParams, $itemsTotal, $offset, $pageSize = 15,
     25function jtpl_function_html_pagelinks($tpl, $action, $actionParams, $itemsTotal, $currentPage, $pageSize = 15,
    2626                                      $paramName = 'offset', $displayProperties = array())
    2727{
    28     $offset = intval($offset);
    29     if ($offset <= 0)
    30         $offset = 0;
     28    $currentPage = intval($currentPage);
     29    if ($currentPage <= 0) {
     30        $currentPage = 1;
     31    }
    3132
    3233    $itemsTotal = intval($itemsTotal);
    3334
    3435    $pageSize = intval($pageSize);
    35     if ($pageSize < 1)
     36    if ($pageSize < 1) {
    3637        $pageSize = 1;
     38    }
     39
     40    // calculation of total pages
     41    $pagesTotal = ceil($itemsTotal/$pageSize);
     42
     43    if($currentPage > $pagesTotal) {
     44        return;
     45    }
    3746
    3847    // If there are at least two pages of results
    39     if ($itemsTotal > $pageSize) {
     48    if ($pagesTotal > 1) {
    4049        $jUrlEngine = jUrl::getEngine();
    4150
    4251        $urlaction = jUrl::get($action, $actionParams, jUrl::JURLACTION);
    4352
    44         $defaultDisplayProperties = array('start-label' => '|&lt;',
    45                                           'prev-label'  => '&lt;',
    46                                           'next-label'  => '&gt;',
    47                                           'end-label'   => '&gt;|',
     53        $defaultDisplayProperties = array('start-label' => '&laquo;',
     54                                          'prev-label'  => '&lsaquo;',
     55                                          'next-label'  => '&rsaquo;',
     56                                          'end-label'   => '&raquo;',
    4857                                          'area-size'   => 0);
    4958
    50         if (is_array($displayProperties) && count($displayProperties) > 0)
     59        if (is_array($displayProperties) && count($displayProperties) > 0) {
    5160            $displayProperties = array_merge($defaultDisplayProperties, $displayProperties);
    52         else
     61        } else {
    5362            $displayProperties = $defaultDisplayProperties;
     63        }
    5464
    5565        $pages = array();
    56 
    57         $currentPage = 1;
    58 
    5966        $numpage = 1;
    60 
    6167        $prevBound = 0;
    62 
    6368        $nextBound = 0;
    6469
    65         // Generates list of page offsets
    66         for($curidx = 0; $curidx < $itemsTotal; $curidx += $pageSize) {
    67             if($offset >= $curidx && $offset < $curidx + $pageSize) {
     70        // Generates list of page
     71        for($x = 1; $x <= $pagesTotal; ++$x) {
     72            if($currentPage == $x) {
    6873                $pages[$numpage] = '<li class="pagelinks-current">'.$numpage.'</li>';
    69                 $prevBound = $curidx - $pageSize;
    70                 $nextBound = $curidx + $pageSize;
     74                $prevBound = $x - 1;
     75                $nextBound = $x + 1;
    7176                $currentPage = $numpage;
    7277            } else {
    73                 $urlaction->params[$paramName] = $curidx;
     78                $urlaction->params[$paramName] = $x;
    7479                $url = $jUrlEngine->create($urlaction);
    7580                $pages[$numpage] = '<li><a href="'.$url->toString(true).'">'.$numpage.'</a></li>';
    7681            }
    77             $numpage++;
     82            ++$numpage;
    7883        }
    7984
    8085        // Calculate start page url
    81         $urlaction->params[$paramName] = 0;
     86        $urlaction->params[$paramName] = 1;
    8287        $urlStartPage = $jUrlEngine->create($urlaction);
    8388
    8489        // Calculate previous page url
     
    9095        $urlNextPage = $jUrlEngine->create($urlaction);
    9196
    9297        // Calculate end page url
    93         $urlaction->params[$paramName] = (count($pages) - 1) * $pageSize;
     98        $urlaction->params[$paramName] = count($pages);
    9499        $urlEndPage = $jUrlEngine->create($urlaction);
    95100
    96101
     
    100105        // Start link
    101106        if (!empty($displayProperties['start-label'])) {
    102107            echo '<li class="pagelinks-start';
    103             if ($prevBound >= 0) {
    104                 echo '"><a href="', $urlStartPage->toString(true), '">', $displayProperties['start-label'], '</a>';
     108            if ($prevBound >= 1) {
     109                echo '"><a href="'.$urlStartPage->toString(true).'">'.$displayProperties['start-label'].'</a>';
    105110            } else {
    106                 echo ' pagelinks-disabled">',$displayProperties['start-label'] ;
     111                echo ' pagelinks-disabled">'.$displayProperties['start-label'];
    107112            }
    108             echo '</li>', "\n";
     113            echo '</li>'."\n";
    109114        }
    110115
    111116        // Previous link
    112117        if (!empty($displayProperties['prev-label'])) {
    113118            echo '<li class="pagelinks-prev';
    114             if ($prevBound >= 0) {
    115                 echo '"><a href="', $urlPrevPage->toString(true), '">', $displayProperties['prev-label'], '</a>';
     119            if ($prevBound >= 1) {
     120                echo '"><a href="'.$urlPrevPage->toString(true).'">'.$displayProperties['prev-label'].'</a>';
    116121            } else {
    117                 echo ' pagelinks-disabled">',$displayProperties['prev-label'] ;
     122                echo ' pagelinks-disabled">'.$displayProperties['prev-label'];
    118123            }
    119             echo '</li>', "\n";
     124            echo '</li>'."\n";
    120125        }
    121126
    122127        // Pages links
    123128        foreach ($pages as $key => $page) {
    124129            if ($displayProperties['area-size'] == 0 || ($currentPage - $displayProperties['area-size'] <= $key)
    125                 && ($currentPage + $displayProperties['area-size'] >= $key))
    126                 echo $page, "\n";
     130                && ($currentPage + $displayProperties['area-size'] >= $key)) {
     131                echo $page."\n";
     132            }
    127133        }
    128134
    129135        // Next link
    130136        if (!empty($displayProperties['next-label'])) {
    131137            echo '<li class="pagelinks-next';
    132             if ($nextBound < $itemsTotal) {
    133                 echo '"><a href="', $urlNextPage->toString(true), '">', $displayProperties['next-label'], '</a>';
     138            if ($nextBound <= $pagesTotal) {
     139                echo '"><a href="'.$urlNextPage->toString(true).'">'.$displayProperties['next-label'].'</a>';
    134140            } else {
    135                 echo ' pagelinks-disabled">',$displayProperties['next-label'] ;
     141                echo ' pagelinks-disabled">'.$displayProperties['next-label'];
    136142            }
    137             echo '</li>', "\n";
     143            echo '</li>'."\n";
    138144        }
    139145
    140146        // End link
    141147        if (!empty($displayProperties['end-label'])) {
    142148            echo '<li class="pagelinks-end';
    143             if ($nextBound < $itemsTotal) {
    144                 echo '"><a href="', $urlEndPage->toString(true), '">', $displayProperties['end-label'], '</a>';
     149            if ($nextBound <= $pagesTotal) {
     150                echo '"><a href="'.$urlEndPage->toString(true).'">'.$displayProperties['end-label'].'</a>';
    145151            } else {
    146                 echo ' pagelinks-disabled">',$displayProperties['end-label'] ;
     152                echo ' pagelinks-disabled">'.$displayProperties['end-label'];
    147153            }
    148             echo '</li>', "\n";
     154            echo '</li>'."\n";
    149155        }
    150 
    151156        echo '</ul>';
     157    } else {
     158        echo '<ul class="pagelinks"><li class="pagelinks-current">1</li></ul>';
    152159    }
    153     else echo '<ul class="pagelinks"><li class="pagelinks-current">1</li></ul>';
    154160}