tp5.1.27 lts 集成 layuiadmin 无需修改框架源码,但需统一静态资源路径映射、启用模板继承、将 iframe 路由改为控制器地址,并手动处理 laypage 分页;关键配置在 config/template.php 中设置 tpl_replace_string 和 layout_on。

直接说结论:TP5.1.27 LTS 引入 Layui 不需要改框架源码,但必须统一静态资源路径映射、正确处理模板继承与 iframe 路由跳转,否则 layuiadmin 的菜单、弹窗、分页都会加载失败或 404。
静态资源路径映射必须配对 __layuiadmin__
TP5.1.27 的模板变量替换机制依赖 tpl_replace_string 配置,而 LayuiAdmin 的 HTML 中大量使用 ../layuiadmin/xxx.js 这类相对路径。硬改所有 HTML 不现实,也不可持续。
正确做法是把 LayuiAdmin 的 layuiadmin 目录放到 public/static/admin/ 下(例如:public/static/admin/layuiadmin/),然后在 config/template.php 中添加:
return [
// ...
'tpl_replace_string' => [
'__STATIC__' => '/static',
'__layuiadmin__' => '/static/admin/layuiadmin',
],
];
注意两点:
-
__layuiadmin__的值必须以/开头,否则生成的 URL 会变成相对路径,导致 404 - 别写成
__LAYUIADMIN__或大小写混用 —— TP 模板变量替换严格区分大小写 - 如果用了多模块(如
admin模块),这个配置要放在全局config/template.php,不是模块级配置
index.html 里所有 iframe src 必须改成 {:url('...')}
LayuiAdmin 原生用的是前端路由 + 静态 HTML 文件直读(如 src="home/console.html"),但在 TP 中,这些 HTML 必须走控制器路由,否则无法执行 PHP 模板逻辑、无法带 session、无法做权限拦截。
原始写法(会 404):
<iframe src="home/console.html" frameborder="0" class="layadmin-iframe"></iframe>
应改为(假设你已定义 admin/index/console 方法):
<iframe src="%7B:url('console')%7D" frameborder="0" class="layadmin-iframe"></iframe>
常见错误:
- 漏掉
{:url('console')}的单引号,写成{:url(console)}→ 解析为常量,报错 - 没在
app/admin/controller/Index.php中定义console()方法,或没返回view() - 没把
console.html放到对应视图目录(如app/admin/view/index/console.html)
分页必须用 Db::table()->paginate() + 手动传参给 laypage.render
Layui 的 laypage 是纯前端分页器,但 TP5.1.27 的 paginate() 默认输出的是 Bootstrap 风格 HTML,和 Layui 的 JS 渲染不兼容。所以不能直接 {$list->render()}。
你需要手动拆解分页数据:
// 控制器中 $data['user'] = $dataUser->items(); $data['total_num'] = $dataUser->total(); $data['page'] = $dataUser->currentPage(); $data['pageSize'] = $dataUser->listRows();
前端 JS 中这样写:
laypage.render({
elem: 'paging',
count: {$total_num},
limit: {$pageSize},
curr: {$page},
jump: function(obj, first) {
if (!first) {
location.href = '{:url("index/list")}?page=' + obj.curr;
}
}
});
关键点:
-
count必须是总条数($dataUser->total()),不是当前页数据长度 -
curr要用$dataUser->currentPage(),不是input('get.page'),后者在首次访问时可能为空 - 别在
jump里用 AJAX 拼 HTML —— LayuiAdmin 的 console 页面本身是完整 HTML,刷新更稳妥
TP6 和 TP5.1.27 的 view.php 配置位置不同,别抄错
如果你参考的是 TP6 教程,会看到配置写在 config/view.php;但 TP5.1.27 的模板配置只认 config/template.php。这是最常被忽略的兼容性断点。
验证方式很简单:在控制器里 dump config('template.tpl_replace_string'),看输出里有没有 __layuiadmin__。没有,说明配置没生效。
另外,TP5.1.27 默认关闭了 layout 模板继承(即 {extend name="..."}),如果要用基础模板(如 base.html),需确认 config/template.php 中有:
'layout_on' => true, 'layout_name' => 'layout',
否则 {extend} 标签会被原样输出为 HTML 注释,页面结构全乱。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











