Помогите плиз с pagination while на пхп как лимитировать...

B
На сайте с 21.08.2017
Offline
28
1083

есть готовая пагинация код:


while ( ++$i <= $pages_amount ):
if ( $i == $current_page ):
?>
<strong><?=$i?></strong>
<? else: ?>
<a href="?page=<?=$i?>"><?=$i?></a>
<?
endif;
endwhile;

вопрос как сделать дабы пагинация показывалась не вся сразу, так как страниц билее 5000 и получается пол экрана занимает только сама пагинациа, а скажем 5 страниц назад и 5 вперед. ну и первая и последня типа так:

1 .. 3 4 5 6 7 (8) 9 10 11 12 13 .. 5000

где 8 скаажем текущая а 5000 последняя

спасибо.

[umka]
На сайте с 25.05.2008
Offline
456
#1

Ну так перебирайте в цикле не с первой ($i=0) до последней ($pages_amount), а от текущей-5 и до текущей+5.

Лог в помощь!
B
На сайте с 21.08.2017
Offline
28
#2

[umka], Сделал только теперь выводит в списке страниц бесконечно как в плюс так и в минус как лимитировать дабы не было страниц с -1 -2 -3 итд и не больше максимального кол-ва страниц спасибо.

$limit_minus = $current_page - 5;

$limit_plus = $current_page + 5;
while ( ++$limit_minus <= $limit_plus ):
if ( $limit_minus == $current_page ):
?>
<strong><?=$limit_minus?></strong>
<? else: ?>
<a href="?page=<?=$limit_minus?>"><?=$limit_minus?></a>
<?
endif;
endwhile;
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#3

где-то валяется такая функция:

function paginsadmin ($cnt=100,$rpp=10,$rad=1,$link_sc='page_navigation.php'){

$links=$rad*2+1;

$pages=ceil($cnt/$rpp);

$return='Страницы: ';

if ($page>0) { $return.= "<a href=\"$link_sc&p=1\">Последняя</a> | <a href=\"$link_sc&p=".($page)."\">Предыдущая</a> |"; }

$start=$page-$rad;

if ($start>$pages-$links) { $start=$pages-$links; }

if ($start<0) { $start=0; }

$end=$start+$links;

if ($end>$pages) { $end=$pages; }

for ($i=$start; $i<$end; $i++) {

$return.= " ";

if ($i==$page) {

$return.= "<b>";

} else {

$return.= "<a href=\"$link_sc&p=".($i+1)."\">";

}

$return.= ($i+1);

if ($i==$page) {

$return.= "</b>";

} else {

$return.= "</a>";

}

if ($i!=($end-1)) { $return.= "&nbsp;|"; }

}

if ($pages>$links&&$page<($pages-$rad-1)) { $return.= " ... <a href=\"$link_sc&p=".($pages)."\">".($pages)."</a>"; }

if ($page<$pages-1) { $return.= " <a href=\"$link_sc&p=".($page+2)."\">Следующая</a> | <a href=\"$link_sc&p=".($pages)."\">Последняя</a>"; }

return $return;

}

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
M
На сайте с 04.12.2013
Offline
223
#4

Buildozer, посмотрите мою статью Как сделать пагинацию? В начале месяца по просьбам трудящихся как раз запостил коммент с формулами для плавающей навигации.

---------- Добавлено 01.12.2017 в 02:06 ----------

Пример разметки для плавающей плюс prev/next завтра запостю там же.

---------- Добавлено 01.12.2017 в 02:21 ----------

Можно не ждать до завтра: http://www.masterwebs.ru/topic/28382-proshu-peredat-skript/page-3#entry171518

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
B
На сайте с 21.08.2017
Offline
28
#5

9чтото никак не могу разобраться плиз кто может скиньте примерчик готовой пагинации на основе моего кода (бд нет вообше) спасибо огромное.

пс можно за плату...

M
На сайте с 04.12.2013
Offline
223
#6

Какого вашего кода? У вас там нет пагинации как таковой. Только постраничная навигация.

Если вам слабо взять готовые формулы и подставить в готовую разметку, тут уже ничего не поможет. Развивайтесь.

---------- Добавлено 01.12.2017 в 13:42 ----------

P.S. Если влом пару абзацев с описанием прочитать, то

$pn – это ваша $current_page,

$pc – это ваша $pages_amount,

$range (это еще один короткий абзац) определяет ширину отображаемого диапазона, для +/-5 нужно установить в 10.

S
На сайте с 13.10.2014
Offline
171
#7

Держите. Кусочек пагинатора из одного моего проекта.

функция renderPagination написана для того, чтобы показать, как это работает


<?php


function renderPagination($pagArray)
{
$prevKey = 0;
print '<ul>';

foreach($pagArray as $key => $item)
{
if ($item['current']===TRUE)
$status = " active";
else
$status = "";

if ($key != $prevKey+1)
print '<li class="page_item space">...</li>';

print '<li class="page_item'.$status.'"><a href="#link'.$item['url'].'">'.$item['id'].'</a></li>';

$prevKey = $key;
}
print '</ul>';

}


function pagination ($totalPages=0,$currentPage=0)
{
// 1. смотрим сколько страниц
// если меньше 10 выводим всё

$lArrays = array();

$in = 3;
$currentStart = $currentPage - 1;
$currentEnd = $currentPage + 1;
$out = $totalPages - $in+1;

if ($totalPages < 10)
{
for ($i=1;$i<=$totalPages;$i++)
if ($i<=$totalPages)
$lArrays[$i]=array(
'id' => $i,
'url' => '?q='.$i,
'current' => $i==$currentPage?TRUE:FALSE,
);
}
else
{
/*in*/
for ($i=1; $i<=$in; $i++)
$lArrays[$i] = array(
'id' => $i,
'url' => '?q='.$i,
'current' => FALSE,
);
/*out*/
for ($i=$out;$i<=$totalPages;$i++)
$lArrays[$i] = array(
'id' => $i,
'url' => '?q='.$i,
'current' => FALSE,
);
/*current*/
for ($i=$currentStart;$i<=$currentEnd;$i++)
if ($i<=$totalPages)
$lArrays[$i]=array(
'id' => $i,
'url' => '?q='.$i,
'current' => $i==$currentPage?TRUE:FALSE,
);
/*sort*/
ksort($lArrays);

/* render */
}
renderPagination($lArrays);
}


pagination(8000,748);

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий