Пагинация дублирует страницы на первой и последней странице

Если я на странице 2 (? P = 2) Вот так выглядит пейджер
Första « 1 2 3 » Sista
Однако, если я нахожусь на странице 1 или 3, это выглядит так

(? Р = 1) 1 2 3 3 » Sista

(? Р = 3) Första « 1 1 2 3

Что я делаю неправильно?
Я использую логику из другого вопроса, который был размещен на этом сайте, но, похоже, никто не испытывает эту проблему, как я. Ограничить номер страницы нумерации страниц

function get_paging_info($tot_rows,$pp,$curr_page)
{

$pages = ceil($tot_rows / $pp); // calc pages

$data              = array();                  // start out array
$data['si']        = ($curr_page * $pp) - $pp; // what row to start at
$data['pages']     = $pages;                   // add the pages
$data['curr_page'] = $curr_page;               // Whats the current page

return $data; //return the paging data

}

function pagin($db,$sql,$limit,$curr_page,$max_pages=7)
{

$res   = $db->query($sql);
$count = $res->num_rows;

$paging_info = get_paging_info($count,$limit,$curr_page);

$out[] = "<nav aria-label='Page navigation'>
<ul class='pagination'>";

if($paging_info['curr_page'] > 1)
{

$out[] = "<li><a href='?p=1' title='Sida 1'>Första</a></li>
<li>
<a href='?p=". ($paging_info['curr_page'] - 1) ."' aria-label='Föregående'>
<span aria-hidden='true'>&laquo;</span>
</a>
</li>";

}

$max = $max_pages;
if($paging_info['curr_page'] < $max)
{

$sp = 1;

}
elseif($paging_info['curr_page'] >= ($paging_info['pages'] - floor($max / 2)) )
{

$sp = $paging_info['pages'] - $max + 1;

}
elseif($paging_info['curr_page'] >= $max)
{

$sp = $paging_info['curr_page']  - floor($max/2);

}

if($paging_info['curr_page'] >= $max)
{

$out[] = "<li><a href='?p=1' title='Sida 1'>1</a></li>";

}

for($i = $sp; $i <= ($sp + $max -1);$i++)
{

if($i > $paging_info['pages']) continue;

if($paging_info['curr_page'] == $i)
{

$out[] = "<li class='active'><span class='strong'>". $i ."</span></li>";

}
else
{

$out[] = "<li><a href='?p=". $i ."' title='Sida ". $i ."'>". $i ."</a></li>";

}

}

if($paging_info['curr_page'] < ($paging_info['pages'] - floor($max / 2)))
{

$out[] = "<li><a href='?p=". $paging_info['pages'] ."' title='Sida ". $paging_info['pages'] ."'>". $paging_info['pages'] ."</a></li>";

}

if($paging_info['curr_page'] < $paging_info['pages'])
{

$out[] = "<li>
<a href='?p=". ($paging_info['curr_page'] + 1) ."' aria-label='Nästa' title='Page ". ($paging_info['curr_page'] + 1) ."'>
<span aria-hidden='true'>&raquo;</span>
</a>
</li>
<li><a href='?p=". $paging_info['pages'] ."' title='Sida ". $paging_info['pages'] ."'>Sista</a></li>";

}

$out[] = "</ul></nav>";
return implode('',$out);

}

2

Решение

Я думаю, что ваша проблема связана с этими двумя условиями до и после вашего for цикл:

Первый:

if($paging_info['curr_page'] >= $max)
{
$out[] = "<li><a href='?p=1' title='Sida 1'>1</a></li>";
}

Во-вторых:

if($paging_info['curr_page'] < ($paging_info['pages'] - floor($max / 2)))
{
$out[] = "<li><a href='?p=". $paging_info['pages'] ."' title='Sida ". $paging_info['pages'] ."'>". $paging_info['pages'] ."</a></li>";
}

Вам не нужны эти условия, потому что соответствующие страницы уже отображаются с for петля.

2

Другие решения

Попробуй это. Я удалил некоторые дополнительные коды из вашей функции. замени свой pagin с помощью следующего кода и попробуйте

function pagin($db,$sql,$limit,$curr_page,$max_pages=7)
{

$res   = $db->query($sql);
$count = $res->num_rows;

$paging_info = get_paging_info($count,$limit,$curr_page);

$out[] = "<nav aria-label='Page navigation'>
<ul class='pagination'>";

if($paging_info['curr_page'] > 1)
{

$out[] = "<li><a href='?p=1' title='Sida 1'>Första</a></li>
<li>
<a href='?p=". ($paging_info['curr_page'] - 1) ."' aria-label='Föregående'>
<span aria-hidden='true'>&laquo;</span>
</a>
</li>";

}

$max = $max_pages;
if($paging_info['curr_page'] < $max)
{

$sp = 1;

}
elseif($paging_info['curr_page'] >= ($paging_info['pages'] - floor($max / 2)) )
{

$sp = $paging_info['pages'] - $max + 1;

}
elseif($paging_info['curr_page'] >= $max)
{

$sp = $paging_info['curr_page']  - floor($max/2);

}

for($i = $sp; $i <= ($sp + $max -1);$i++)
{

if($i > $paging_info['pages']) continue;

if($paging_info['curr_page'] == $i)
{

$out[] = "<li class='active'><span class='strong'>". $i ."</span></li>";

}
else
{

$out[] = "<li><a href='?p=". $i ."' title='Sida ". $i ."'>". $i ."</a></li>";

}

}

if($paging_info['curr_page'] < $paging_info['pages'])
{

$out[] = "<li>
<a href='?p=". ($paging_info['curr_page'] + 1) ."' aria-label='Nästa' title='Page ". ($paging_info['curr_page'] + 1) ."'>
<span aria-hidden='true'>&raquo;</span>
</a>
</li>
<li><a href='?p=". $paging_info['pages'] ."' title='Sida ". $paging_info['pages'] ."'>Sista</a></li>";

}

$out[] = "</ul></nav>";
return implode('',$out);

}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector