如何在PHP中为分页器生成一些链接而不丢失最后一页


How to generate some links for a paginator in PHP without missing last page?

生成分页器的代码没有按预期工作,可能是什么问题?

该函数获取分页器的HTML链接,给定有关当前页面显示的结果的一些数据$ruta是基本URL,$pagina是我想要为其生成分页链接的当前页面,$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'">&lt;</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'">&gt;</a></span>";
    $enlaces .= "<span><a href='"$ruta?pag=$ultima&max=$limite'">$textoUltima</a></span>";
    return $enlaces;
}

例如,我想为页面2生成分页器的链接,总共有37个结果,但网页每页只显示10个结果基本url是/busqueda/resultados/

如果我将这些参数传递给函数,它会为前30个结果的前3个页面生成3个链接,但也应该为最后一个页面生成第4个链接(因为每个页面最多包含10个,前三个页面每个包含10个链接,总共30个,但第4个页面包含剩余的7个链接,应该有一个链接)。

这应该像将地板改为天花板一样简单。