自定义Laravel分页时如何动态生成页码链接替代硬编码
动态分页功能实现方案
你使用的是Laravel框架的分页器实例,它本身提供了完整的方法可以实现动态页码生成,无需硬编码固定页码,修改后的完整代码如下:
@if($paginator->hasPages()) <div class="pagination"> {{-- 上一页按钮 --}} @if ($paginator->currentPage() > 1) <a href="{{ $paginator->previousPageUrl() }}">«</a> @else <a href="" style="opacity:0.5; pointer-events:none;">«</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;">»</a> @else <a href="{{ $paginator->nextPageUrl() }}">»</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() }}">«</a> @else <a href="" style="opacity:0.5; pointer-events:none;">«</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;">»</a> @else <a href="{{ $paginator->nextPageUrl() }}">»</a> @endif </div> @endif
内容的提问来源于stack exchange,提问作者Alphy Gacheru
相关产品推荐
相关产品推荐

