如何在 Laravel 8 中自定义分页导航结构(保留 HTML 语义与样式)

轻婷小哥_9769

轻婷小哥_9769

2026-10-05

346人浏览

原创

如何在 Laravel 8 中自定义分页导航结构(保留 HTML 语义与样式)

本文详解如何在 Laravel 8 中完全控制分页 HTML 结构,解决 links() 方法嵌入导致标签错位的问题,通过自定义分页视图实现精准渲染 Prev/Next 按钮与数字页码,兼容搜索参数(withQueryString()),并保持语义化与可维护性。

本文详解如何在 laravel 8 中完全控制分页 html 结构,解决 `links()` 方法嵌入导致标签错位的问题,通过自定义分页视图实现精准渲染 prev/next 按钮与数字页码,兼容搜索参数(`withquerystring()`),并保持语义化与可维护性。

在 Laravel 中,默认的 {{ $articles->links() }} 会渲染一个完整的 <nav></nav> 包裹的分页组件,而你在 Blade 模板中已手动编写了符合设计规范的 <nav class="pgn"></nav> 结构——此时若直接混用 !! $articles->links() !!,会导致 HTML 嵌套混乱(例如外层 <ul></ul> 内重复出现 <nav></nav> 或 <ul></ul>),破坏 DOM 层级,造成样式失效或逻辑错误。这就是你遇到“Prev/Next 可用,中间页码不显示或结构错乱”的根本原因:Laravel 默认分页视图无法与你手写的容器结构共存,它试图“自己画整个盒子”,而非只提供“盒子里的按钮”。

✅ 正确解法:使用自定义分页视图(推荐且标准)

Laravel 提供了开箱即用的分页视图定制机制,无需修改核心代码,仅需两步:

1. 发布分页视图资源

运行命令,将默认分页模板复制到 resources/views/vendor/pagination/ 目录下:

php artisan vendor:publish --tag=laravel-pagination

执行后,你会看到 resources/views/vendor/pagination/default.blade.php —— 这就是你要修改的起点。

2. 创建并配置自定义视图(如 custom.blade.php)

在 resources/views/vendor/pagination/ 下新建文件 custom.blade.php,按你的 HTML 结构重写逻辑(注意:变量名统一为 $paginator,非 $articles):

Wechat HTML Publisher
Wechat HTML Publisher

直接上传HTML富文本到微信公众号草稿箱。支持完整的HTML格式,无需Markdown转换。

下载
@unless($paginator->onFirstPage())
    
  • Prev
  • @else
  • Prev
  • @endunless @foreach ($elements as $element) @if (is_string($element))
  • {{ $element }}
  • @endif @if (is_array($element)) @foreach ($element as $page => $url) @if ($page == $paginator->currentPage())
  • {{ $page }}
  • @else
  • {{ $page }}
  • @endif @endforeach @endif @endforeach @unless($paginator->hasMorePages())
  • Next
  • @else
  • Next
  • @endunless

    ⚠️ 关键说明:

    • 使用 $paginator(Laravel 传递的分页器实例),不是控制器中的 $articles;
    • withQueryString() 确保翻页时保留 ?search=xxx 等查询参数;
    • onFirstPage() / hasMorePages() 是分页器内置方法,安全判断边界;
    • class="disabled" + <span></span> 用于禁用状态(无链接),符合可访问性(a11y)要求。

    3. 在页面模板中调用自定义视图

    回到你的 Blade 模板(如 index.blade.php),替换原分页代码为:

    <nav class="pgn"><ul>
          {{-- Prev --}}
          @if ($articles->onFirstPage())
              <li class="disabled"><span class="pgn__prev">Prev</span></li>
          @else
              <li><a class="pgn__prev" href="%7B%7B%20%24articles->withQueryString()->previousPageUrl()%20%7D%7D">Prev</a></li>
          @endif
    
          {{-- 自定义分页项 --}}
          {{ $articles->links('vendor.pagination.custom') }}
    
          {{-- Next --}}
          @if ($articles->hasMorePages())
              <li><a class="pgn__next" href="%7B%7B%20%24articles->withQueryString()->nextPageUrl()%20%7D%7D">Next</a></li>
          @else
              <li class="disabled"><span class="pgn__next">Next</span></li>
          @endif
      </ul></nav>

    ✅ 此时 HTML 结构 100% 符合你的原始设计:外层 <nav></nav> + <ul></ul> 完全可控,内部仅插入 <li> 序列,无额外包裹,CSS 类名(pgn__prev/pgn__num/current)精准生效。

    ? 额外建议

    • SEO & 可访问性:确保 <a></a> 标签包含 rel="prev"/rel="next" 属性(可在自定义视图中添加),有助于搜索引擎理解分页关系;
    • 移动端适配:若页码过多,可在自定义视图中加入“首/末页”或动态省略逻辑(如仅显示当前页 ±2 页);
    • 复用性:同一套 custom.blade.php 可被所有分页对象($articles, $comments 等)复用,只需调用 ->links('vendor.pagination.custom')。

    通过该方案,你既保留了 Laravel 分页的全部功能(查询参数继承、数据绑定、响应式支持),又完全掌控 HTML 输出结构,是 Laravel 8+ 中定制分页的标准实践路径。

    前端入门到VUE实战笔记:立即使用
    在学习笔记中,你将探索 前端 的入门与实战技巧!

    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    laravel html

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    php文件怎么打开
    php文件怎么打开

    打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

    2023.09.01

    9984

    6

    php怎么取出数组的前几个元素
    php怎么取出数组的前几个元素

    取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

    2023.10.11

    5941

    5

    php反序列化失败怎么办
    php反序列化失败怎么办

    php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

    2023.10.11

    2075

    5

    php怎么连接mssql数据库
    php怎么连接mssql数据库

    连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

    2023.10.23

    3708

    4

    php连接mssql数据库的方法
    php连接mssql数据库的方法

    php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

    2023.10.23

    4414

    6

    html怎么上传
    html怎么上传

    html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.03

    3451

    9

    PHP出现乱码怎么解决
    PHP出现乱码怎么解决

    PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.09

    4917

    8

    php文件怎么在手机上打开
    php文件怎么在手机上打开

    php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.13

    3862

    8

    sprintf函数用法详解
    sprintf函数用法详解

    sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

    2023.11.27

    11842

    4

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    如何安装 Composer
    如何安装 Composer

    共1课时 | 197人学习

    Composer手册
    Composer手册

    共0课时 | 0人学习