PHP: простая постраничная разбивка (315 байт)
Сразу приведу пример реализации:
и исходный код функции на 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>