如何在不丢失最后一页的情况下为 PHP 中的分页器生成一些链接?
How to generate some links for a paginator in PHP without missing last page?
这段生成分页器的代码没有按预期工作,可能是什么问题?
此函数为分页器获取 HTML links,给定有关当前页面显示结果的一些数据。 $ruta是基础URL,$pagina是我要生成分页的当前页面links,$limite是每页显示的结果数,$total是结果总数待分页。
function generarPaginador($ruta, $pagina, $limite, $total)
{
// Traducciones
$textoPrimera = _('Primera');
$textoUltima = _('Última');
// Variables para la numeración de los enlaces para paginación
$primera = 1;
$ultima = ceil($total / $limite); //I was using floor but thanks to the answer I could verify that ceil gives me the correct pagination links for the given parameters
$anterior = $pagina == 1 ? 1 : $pagina - 1;
$siguiente = ( ( $pagina + 1) > $ultima) ? $ultima : $pagina + 1;
if ($ultima == 1) {
return '';
}
// ENLACES: Primeros
$enlaces = '';
$enlaces .= "<span><a href=\"$ruta?pag=$primera&max=$limite\">$textoPrimera</a></span>";
$enlaces .= "<span><a href=\"$ruta?pag=$anterior&max=$limite\"><</a></span>";
// ENLACES: Previos a la página actual
$i = ( $pagina - 3) > 0 ? $pagina - 3 : 1;
while ($i < $pagina) {
$enlaces .= "<span><a href=\"$ruta?pag=$i&max=$limite\">$i</a></span>";
$i++;
}
// ENLACES: Página actual
$enlaces .= "<span class=\"current\">$pagina</span>";
// ENLACES: Siguientes a la página actual
$i = $pagina + 1;
$tamano = $pagina + 3;
while (($i <= $ultima ) && ($i <= $tamano)) {
$enlaces .= "<span><a href=\"$ruta?pag=$i&max=$limite\">$i</a></span>";
$i++;
}
// ENLACES: Últimos enlaces
$enlaces .= "<span><a href=\"$ruta?pag=$siguiente&max=$limite\">></a></span>";
$enlaces .= "<span><a href=\"$ruta?pag=$ultima&max=$limite\">$textoUltima</a></span>";
return $enlaces;
}
例如,我想为 第 2 页 生成分页器的 link,总共有 37 个结果,但该网页仅显示 每页 10 个结果。基数 url 是 /busqueda/resultados/
如果我将这些参数传递给函数,它会为具有前 30 个结果的前 3 个页面生成 3 link 没有问题,但它也应该为最后一个生成第 4 个 link页(因为每页最多10页,所以前三页每页10页,一共30页,但第四页包含剩余的7页,应该有一个link)。
这应该就像将地板换成天花板一样简单。
这段生成分页器的代码没有按预期工作,可能是什么问题?
此函数为分页器获取 HTML links,给定有关当前页面显示结果的一些数据。 $ruta是基础URL,$pagina是我要生成分页的当前页面links,$limite是每页显示的结果数,$total是结果总数待分页。
function generarPaginador($ruta, $pagina, $limite, $total)
{
// Traducciones
$textoPrimera = _('Primera');
$textoUltima = _('Última');
// Variables para la numeración de los enlaces para paginación
$primera = 1;
$ultima = ceil($total / $limite); //I was using floor but thanks to the answer I could verify that ceil gives me the correct pagination links for the given parameters
$anterior = $pagina == 1 ? 1 : $pagina - 1;
$siguiente = ( ( $pagina + 1) > $ultima) ? $ultima : $pagina + 1;
if ($ultima == 1) {
return '';
}
// ENLACES: Primeros
$enlaces = '';
$enlaces .= "<span><a href=\"$ruta?pag=$primera&max=$limite\">$textoPrimera</a></span>";
$enlaces .= "<span><a href=\"$ruta?pag=$anterior&max=$limite\"><</a></span>";
// ENLACES: Previos a la página actual
$i = ( $pagina - 3) > 0 ? $pagina - 3 : 1;
while ($i < $pagina) {
$enlaces .= "<span><a href=\"$ruta?pag=$i&max=$limite\">$i</a></span>";
$i++;
}
// ENLACES: Página actual
$enlaces .= "<span class=\"current\">$pagina</span>";
// ENLACES: Siguientes a la página actual
$i = $pagina + 1;
$tamano = $pagina + 3;
while (($i <= $ultima ) && ($i <= $tamano)) {
$enlaces .= "<span><a href=\"$ruta?pag=$i&max=$limite\">$i</a></span>";
$i++;
}
// ENLACES: Últimos enlaces
$enlaces .= "<span><a href=\"$ruta?pag=$siguiente&max=$limite\">></a></span>";
$enlaces .= "<span><a href=\"$ruta?pag=$ultima&max=$limite\">$textoUltima</a></span>";
return $enlaces;
}
例如,我想为 第 2 页 生成分页器的 link,总共有 37 个结果,但该网页仅显示 每页 10 个结果。基数 url 是 /busqueda/resultados/
如果我将这些参数传递给函数,它会为具有前 30 个结果的前 3 个页面生成 3 link 没有问题,但它也应该为最后一个生成第 4 个 link页(因为每页最多10页,所以前三页每页10页,一共30页,但第四页包含剩余的7页,应该有一个link)。
这应该就像将地板换成天花板一样简单。