thinkphp 模板引入公共文件须用 {include} 标签,路径从 view 目录起算,传参需字符串键值对,静态资源用 {__static__} 替换,推荐布局模板替代重复 include。

ThinkPHP 引入公共文件(如 header、footer)主要靠模板引擎的 {include} 标签,不是 PHP 的 include 或 require。路径写法、作用域传递、静态资源处理这三点最容易出错,搞清规则就能一次配对不报错。
路径必须从 view 目录开始算起
ThinkPHP 的 {include} 不认当前文件所在位置,也不走 PHP 的 include_path,只认「模板根目录(即 view/)下的相对路径」。
-
正确写法(推荐绝对路径):
{include file="/public/header" /}→ 对应view/public/header.html -
模块内引用:
{include file="common/header" /}→ 当前模块下view/[模块名]/common/header.html -
跨模块引用:
{include file="admin@public/header" /}→ 引入view/admin/public/header.html(admin 模块需存在) -
错误写法(90% 报错来源):
{include file="../common/header" /}、{include file="header.html" /}、{include file="./header" /}—— 这些都会在当前模板同级目录找,几乎必然 404
传参要字符串键值对,不能写 PHP 数组
被包含模板默认能访问父模板变量,但显式传参更安全、可读性更强。注意语法限制:
- 单个参数:
{include file="/public/header" title="首页" /}→ 在header.html中用{$title} - 多个参数:
{include file="/public/header" title="首页" is_login=1 user_name=$user.name /} - 复杂数据建议控制器赋值:
$this->assign('header_data', $data);,再写{include file="/public/header" header_data=$header_data /} - 禁止写法:
{include file="/public/header" data="['title'=>'首页']" /}—— ThinkPHP 不解析这种 PHP 数组字面量
CSS/JS 路径乱?问题不在 include,而在 HTML 解析逻辑
{include} 只是把 HTML 字符串拼进去,不会重写 <link> 或 <script></script> 的 href/src。所以如果 header.html 里写了 href="css/style.css",浏览器会按当前 URL 路径去解析,极易 404。
- 静态资源统一用
{__STATIC__}或{__PUBLIC__}替换:<link href="%7B__STATIC__%7D/css/common.css" rel="stylesheet"> - 或改用系统标签简化引入:
<css href="__STATIC__/css/common.css"></css>、<js href="__STATIC__/js/utils.js"></js> - 确认
__STATIC__配置是否生效:在config/template.php中检查'view_replace_str'是否设置了对应路径映射
替代方案:用布局模板(layout)更规范
如果全站头部尾部结构固定,比反复写 {include} 更推荐启用布局模板功能。
- 配置开启:
'template' => ['layout_on' => true, 'layout_name' => 'layout'] - 新建
view/layout.html,内容类似:{include file="/public/header" /}<br> {__CONTENT__}<br> {include file="/public/footer" /} - 各页面模板不再手动 include,直接写业务内容;框架自动把内容注入到
{__CONTENT__}位置 - 支持嵌套布局,适合多级管理后台等复杂场景
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











