Пагинация: настройка вывода ссылок
Товарищи!
У меня есть скрипт пагинации, но я не соображу как его настроить, чтобы у ссылок на страницы был определённый вид. Нужно, чтобы было примерно так:
1 2 3 4 5 6… 17
1 2 3 4 5 6 7… 17
1 2 3 4 5 6 7 8… 17
1 2 3 4 5 6 7 8 9… 17
1… 4 5 6 7 8 9 10… 17
1… 9 10 11 12 13 14 15 16 17
1… 10 11 12 13 14 15 16 17
1… 11 12 13 14 15 16 17
1… 12 13 14 15 16 17
А вот сам скрипт:
public function pages() : string
{
if ($this->pagesTotal > 1) {
$html = '';
for ($i = 1; $i <= $this->pagesTotal; $i++) {
if ($this->page > 1 && $i == $this->page - 2) {
$html .= '<li><a href="' . $this->url . '/' . $i . '"></a>...</li>';
continue;
}
if ($i > $this->page + 2) {
$html .= '<li><a href="' . $i . '"></a>...<li>';
break;
}
if ($i == $this->page) {
$html .= ' <li class="current">' . $i . '</li>';
} else {
$html .= '<li><a href="' . $this->url . '/' . $i . '">' . $i . '</a></li>';
}
}
return $html;
}
}
Помогите пожалуйста чайнику…
Ответы (1 шт):
Автор решения: crazyRabbit
→ Ссылка
В вашем варианте я не совсем уловил логику появления и скрытия элементов, но допущу, что вам может помочь такой код:
function makePager($iStart, $iCurr, $iEnd)
{
$iLeft = $iRight = 3;
if($iEnd < ($iLeft + $iRight + 1)){
return array(1, $iEnd);
} elseif ($iCurr > $iLeft && $iCurr < ($iEnd - $iRight)){
return array(($iCurr - $iLeft), ($iCurr + $iRight));
} elseif ($iCurr <= $iLeft) {
$iSlice = 1 + $iLeft - $iCurr;
return array(1, ($iCurr + ($iRight + $iSlice)));
} else {
$iSlice = $iRight - ($iEnd - $iCurr);
return array(($iCurr - ($iLeft + $iSlice)), $iEnd);
}
}
function pager($from, $current, $to)
{
$slice = makePager($from, $current, $to);
$answer = "";
if($slice[0] != $from){
$answer .= $from." ... ";
}
for($i = $slice[0]; $i <= $slice[1]; $i++){
$answer .= $i." ";
}
if($slice[1] != $to){
$answer .= "... ".$to;
}
return $answer;
}
print_r(pager(1, 12, 24)); // 1 ... 9 10 11 12 13 14 15 ... 24