·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

Discuz!X 模板使用 {template...} 与 {subtemplate...} 的区别

386 2
发表于 2023-7-24 13:49:41 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
之前在Discuz x2.5的模版中引入页头是使用的<!--{subtemplate common/header}-->,而在discuz x3中很多都使用的<!--{template common/header}-->,那么这2个在模版中有什么区别呢?下面就简单说说:

1、在模版中使用{template...},会在生成的 tpl 文件中生成如下代码:
  1. <?php include template('common/header'); ?>
复制代码

此代码将在缓存文件被调用的时候,再次加载目标模版!

2、如果使用{subtemplate...} ,则在 tpl 文件中就直接加载了子模版!

简单说就是:使用 sub 嵌套模版的时候,是直接将被嵌套模版解析为PHP语句并合并入母模板中!而使用 template 的方式,则是:程序运行时include嵌套模板内容!

显然,使用 sub 能加快页面加载的速度!

补充:

还有个区别没人说,template引入的模板如果不存在,会报错,subtemplate引入的模板如果不存在,标签将显示为<!-- home/spacecp_profile_nav -->形式被注释掉的代码,不报错。
我要说一句 收起回复

评论2

Discuz智能体Lv.8 发表于 2025-3-16 23:17:35 | 查看全部
在Discuz!X模板开发中,`{template...}` 和 `{subtemplate...}` 是两个常用的模板标签,它们的主要区别在于模板的加载方式和处理机制。以下是对这两个标签的详细解释:

### 1. `{template...}` 标签
- **作用**:`{template...}` 标签用于在模板中引入另一个模板文件。
- **处理方式**:当使用 `{template...}` 标签时,Discuz! 会在生成的缓存文件中插入一个 `include` 语句,这意味着在页面运行时,目标模板文件会被动态加载。
- **特点**:
  - **动态加载**:目标模板文件在页面运行时才会被加载,因此如果目标模板文件不存在,程序会报错。
  - **灵活性**:由于是动态加载,可以在运行时根据条件加载不同的模板文件。
  - **性能**:由于每次运行时都需要加载目标模板文件,可能会稍微影响页面加载速度。

### 2. `{subtemplate...}` 标签
- **作用**:`{subtemplate...}` 标签也用于在模板中引入另一个模板文件,但处理方式与 `{template...}` 不同。
- **处理方式**:当使用 `{subtemplate...}` 标签时,Discuz! 会在生成缓存文件时直接将目标模板文件的内容解析并合并到当前模板中,而不是在运行时动态加载。
- **特点**:
  - **静态合并**:目标模板文件的内容在生成缓存文件时就已经被合并到当前模板中,因此在页面运行时不需要再次加载目标模板文件。
  - **性能**:由于目标模板文件的内容已经合并到当前模板中,页面加载速度会更快。
  - **容错性**:如果目标模板文件不存在,`{subtemplate...}` 标签会以注释的形式显示在生成的缓存文件中,而不会导致程序报错。

### 总结
- **`{template...}`**:适合需要动态加载模板的场景,灵活性高,但可能会稍微影响性能。
- **`{subtemplate...}`**:适合需要提高页面加载速度的场景,性能更好,且对不存在的模板文件有更好的容错性。

### 使用建议
- 如果你希望在页面运行时动态加载模板文件,并且需要根据条件加载不同的模板,可以使用 `{template...}`。
- 如果你希望提高页面加载速度,并且目标模板文件的内容是固定的,可以使用 `{subtemplate...}`。

希望这个解释能帮助你更好地理解和使用这两个标签。如果你有更多关于Discuz!模板开发的问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-19 00:42:26 | 查看全部
在Discuz!X模板开发中,`{template...}` 和 `{subtemplate...}` 是两种常用的模板引入方式,它们的主要区别在于模板的加载方式和处理机制。以下是对这两种方式的详细解释:

### 1. `{template...}` 的使用
- **加载方式**:使用 `{template...}` 引入模板时,Discuz! 会在生成的缓存文件中插入一个 `include` 语句,这意味着在页面运行时,系统会动态加载目标模板文件。
- **缓存处理**:每次页面加载时,系统都会检查并加载目标模板文件,因此这种方式会增加一定的运行时开销。
- **错误处理**:如果目标模板文件不存在,系统会报错并停止页面渲染。

### 2. `{subtemplate...}` 的使用
- **加载方式**:使用 `{subtemplate...}` 引入模板时,Discuz! 会在生成缓存文件时直接将子模板的内容解析并合并到母模板中。这意味着在页面运行时,子模板的内容已经包含在母模板的缓存文件中,不需要额外的加载操作。
- **缓存处理**:由于子模板的内容已经合并到母模板的缓存文件中,页面加载时不需要再动态加载子模板,因此这种方式可以加快页面加载速度。
- **错误处理**:如果目标模板文件不存在,系统不会报错,而是将 `{subtemplate...}` 标签以注释的形式保留在生成的缓存文件中,页面渲染不会中断。

### 3. 性能对比
- **`{template...}`**:由于每次页面加载时都需要动态加载目标模板文件,因此会增加一定的运行时开销,适合用于需要频繁更新或动态加载的模板。
- **`{subtemplate...}`**:由于子模板的内容已经合并到母模板的缓存文件中,页面加载时不需要再动态加载子模板,因此性能更好,适合用于静态或较少变化的模板。

### 4. 使用场景建议
- **`{template...}`**:适用于需要动态加载或频繁更新的模板部分,例如用户登录状态、动态内容等。
- **`{subtemplate...}`**:适用于静态或较少变化的模板部分,例如页头、页脚、导航栏等。

### 5. 总结
- **`{template...}`**:动态加载,适合需要频繁更新的模板部分,但会增加运行时开销。
- **`{subtemplate...}`**:静态合并,适合静态或较少变化的模板部分,性能更好。

在实际开发中,建议根据模板的使用场景和性能需求选择合适的引入方式,以达到最佳的页面加载效果。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐

点我👉扫码添加站长微信,获取即时帮助!
点我👉扫码添加站长微信,获取即时帮助!
遇到问题别担心,添加站长微信,第一时间为您解决!专属客服在线等,享受一对一服务!

查看 »

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图

您的IP:3.142.201.19,GMT+8, 2025-3-29 10:40 , Processed in 0.323551 second(s), 83 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服
快速回复 返回顶部 返回列表