You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义Laravel分页时如何动态生成页码链接替代硬编码

动态分页功能实现方案

你使用的是Laravel框架的分页器实例,它本身提供了完整的方法可以实现动态页码生成,无需硬编码固定页码,修改后的完整代码如下:

@if($paginator->hasPages())
<div class="pagination">
    {{-- 上一页按钮 --}}
    @if ($paginator->currentPage() > 1)
        <a href="{{ $paginator->previousPageUrl() }}">&laquo;</a>
    @else
        <a href="" style="opacity:0.5; pointer-events:none;">&laquo;</a>
    @endif

    {{-- 动态生成所有页码 --}}
    @for ($i = 1; $i <= $paginator->lastPage(); $i++)
        <a 
            class="{{ $paginator->currentPage() == $i ? 'active' : '' }}" 
            href="{{ $paginator->url($i) }}"
        >
            {{ $i }}
        </a>
    @endfor

    {{-- 下一页按钮 --}}
    @if (!$paginator->hasMorePages())
        <a href="" style="opacity:0.5; pointer-events:none;">&raquo;</a>
    @else
        <a href="{{ $paginator->nextPageUrl() }}">&raquo;</a>
    @endif
</div>
@endif

核心实现逻辑:

  • 上一页跳转地址直接调用$paginator->previousPageUrl()获取
  • 中间的页码通过循环总页数(由$paginator->lastPage()方法获取)动态生成,每个页码的跳转地址通过$paginator->url($对应页码)方法获取,同时判断当前页和循环页码是否相等,相等则添加active高亮类
  • 下一页跳转地址直接调用$paginator->nextPageUrl()获取

如果你的站点分页总页数较多,不想全部展示所有页码,可以使用下面的进阶写法,仅展示当前页前后2页+首尾页+省略号,避免分页栏过长:

@if($paginator->hasPages())
<div class="pagination">
    {{-- 上一页按钮 --}}
    @if ($paginator->currentPage() > 1)
        <a href="{{ $paginator->previousPageUrl() }}">&laquo;</a>
    @else
        <a href="" style="opacity:0.5; pointer-events:none;">&laquo;</a>
    @endif

    {{-- 动态生成带省略号的页码 --}}
    @php
        $currentPage = $paginator->currentPage();
        $lastPage = $paginator->lastPage();
        $showPages = 2; // 当前页前后展示的页码数量
    @endphp

    {{-- 第一页 --}}
    <a class="{{ $currentPage == 1 ? 'active' : '' }}" href="{{ $paginator->url(1) }}">1</a>
    
    {{-- 开头省略号 --}}
    @if($currentPage > $showPages + 2)
        <span>...</span>
    @endif

    {{-- 中间页码 --}}
    @for($i = max(2, $currentPage - $showPages); $i <= min($lastPage - 1, $currentPage + $showPages); $i++)
        <a class="{{ $currentPage == $i ? 'active' : '' }}" href="{{ $paginator->url($i) }}">{{ $i }}</a>
    @endfor

    {{-- 结尾省略号 --}}
    @if($currentPage < $lastPage - $showPages - 1)
        <span>...</span>
    @endif

    {{-- 最后一页 --}}
    @if($lastPage > 1)
        <a class="{{ $currentPage == $lastPage ? 'active' : '' }}" href="{{ $paginator->url($lastPage) }}">{{ $lastPage }}</a>
    @endif

    {{-- 下一页按钮 --}}
    @if (!$paginator->hasMorePages())
        <a href="" style="opacity:0.5; pointer-events:none;">&raquo;</a>
    @else
        <a href="{{ $paginator->nextPageUrl() }}">&raquo;</a>
    @endif
</div>
@endif

内容的提问来源于stack exchange,提问作者Alphy Gacheru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:39:01