PHP: простая постраничная разбивка (315 байт)

Сразу приведу пример реализации:

12345678910111213 ...30

и исходный код функции на PHP в минимизированном виде, 315 байт:

<?php function PageToArray($pc=1,$pa=10,$pp=15){$r=array();if($pa<=$pp){for($i=1;$i<=$pa;$i++)$r[$i]=$i;}else{$b=$pc-floor($pp/2);if($pp%2==0)$b++;if($b<1)$b=1;if($b+$pp>$pa)$b=$pa-$pp+1;for($i=1;$i<=$pp;$i++)$r[$i]=$b++;if($r[1]!=1){$r[1]=1;$r[2]='...';}if($r[$pp]!=$pa){$r[$pp]=$pa;$r[$pp-1]='...';}}return $r;}?>

А теперь, по порядку

Использование функции

//$iPage - текущая страница
//$iAllPage - всего страница
//30 - выводить за раз 20 страниц, если не указано, то выводиться по 15 страниц.
$aPage = PageToArray($iPage,$iAllPage,20);

Исходный код функции на PHP

function PageToArray($pc=1,$pa=10,$pp=15)
    {
    $r = array();
    if ($pa<=$pp)
        {
        for ($i=1;$i<=$pa;$i++)
        $r[$i] = $i;

        } else {

        $b = $pc-floor($pp/2);
        if ( $pp%2==0)
            $b++;
        if ( $b<1 )
            $b = 1;

        if ( $b+$pp > $pa)
            $b = $pa-$pp+1;

        for ($i=1;$i<=$pp;$i++)
            $r[$i] = $b++;

        if ( $r[1]!=1 )
            {
            $r[1] = 1;
            $r[2] = '...';
            }

        if ( $r[$pp]!=$pa )
            {
            $r[$pp] = $pa;
            $r[$pp-1] = '...';
            }
        }

    return $r;
    }

PHP + HTML код

echo '<p class="page" align="center">';
foreach ($aPage as $one)
    if ( $one == '...' )
        {
        echo '<span>...</span>';
        } else {
        echo '<a href="?page='.$one.'"'.
            ($one==$iPage?'class="active"':'').'>'.$one.'</a>';
        }
echo '</p>';

CSS код

.page a
    {
    padding: 2px 5px;
    font-size: 9pt;
    background: #f7f7f7;
    border: 1px solid #c7c7c7;
    color: #000000;
    text-decoration: none;
    margin: 0px 1px;
    font-weight: bold;
    }

.page a:hover
    {
    background: #cccccc;
    border: 1px solid #666666;
    text-decoration: none;
    }

.page a.active
    {
    background: #666666;
    border: 1px solid #666666;
    color: #ffffff;
    font-weight: bold;
    }

.page a.active:hover
    {
    background: #666666;
    }

.page span
    {
    font-weight:bold;
    padding:0 5px;
    }

Готовый пример

Сохраняем например в файл pager.php и пробуем.

<?php

###########################
# Author: www.DimaRF.ru #
###########################

$iAllPage = 30;

$iPage = (int)$_GET['page'];
if ( $iPage < 1 or $iPage > $iAllPage )
    $iPage = 1;

$aPage = PageToArray($iPage,$iAllPage,20);

function PageToArray($pc=1,$pa=10,$pp=15)
    {
    $r = array();
    if ($pa<=$pp)
        {
        for ($i=1;$i<=$pa;$i++)
        $r[$i] = $i;

        } else {

        $b = $pc-floor($pp/2);
        if ( $pp%2==0)
            $b++;
        if ( $b<1 )
            $b = 1;

        if ( $b+$pp > $pa)
            $b = $pa-$pp+1;

        for ($i=1;$i<=$pp;$i++)
            $r[$i] = $b++;

        if ( $r[1]!=1 )
            {
            $r[1] = 1;
            $r[2] = '...';
            }

        if ( $r[$pp]!=$pa )
            {
            $r[$pp] = $pa;
            $r[$pp-1] = '...';
            }
        }

    return $r;
    }

?>
<html>
<head>
    <title>Pager</title>
    <style type="text/css">
<!--
body
    {
    margin: 20px;
    padding: 20px;
    }

.page a
    {
    padding: 2px 5px;
    font-size: 9pt;
    background: #f7f7f7;
    border: 1px solid #c7c7c7;
    color: #000000;
    text-decoration: none;
    margin: 0px 1px;
    font-weight: bold;
    }

.page a:hover
    {
    background: #cccccc;
    border: 1px solid #666666;
    text-decoration: none;
    }

.page a.active
    {
    background: #666666;
    border: 1px solid #666666;
    color: #ffffff;
    font-weight: bold;
    }

.page a.active:hover
    {
    background: #666666;
    }

.page span
    {
    font-weight:bold;
    padding:0 5px;
    }
-->
    </style>
</head>
<body>
<p class="page" align="center">
<?php
foreach ($aPage as $one)
    if ( $one == '...' )
        {
        echo '<span>...</span>';
        } else {
        echo '<a href="?page='.$one.'"'.
            ($one==$iPage?'class="active"':'').'>'.$one.'</a>';
        }
?>
</p>
</body>
</html>


Добавить отзыв на страницу "DimaRF.ru >> Постраничная разбивка".
Показать 3 отзывов по странице "DimaRF.ru >> Постраничная разбивка".