模板引擎
标签是怎么编译的、缓存在哪、调试时怎么办。
编译过程
模板源码
↓ 按 <script> / <style> 切分
↓ 普通片段:编译块标签、单标签、裸变量
↓ 脚本片段:只编译 {naicha:...},其余花括号原样保留
↓ 生成 PHP
↓ 写入 storage/cache/
↓ 之后直接执行缓存
缓存策略
- 缓存文件名由文件内容决定,内容没变就复用
- 改了模板文件,内容变了,缓存自动失效并重新编译
- 因此不需要手动清缓存;后台也提供了手动清理入口以备不时之需
为什么要区别对待 script 片段
JavaScript 里大量使用花括号:对象字面量、函数体、模板字符串。
如果一律把 {...} 当成模板变量,JS 会被编译得面目全非。
所以脚本块内只认带 naicha: 前缀的明确标签,
同时给少数几个脚本里确实需要的宿主变量开了白名单。
调试
- 页面出现意料之外的字面量
{list.title}:多半是标签名或闭合标签写错了 - 循环里取不到值:确认字段确实存在于该标签的作用域,自定义字段记得走
ext - 改了模板没生效:先确认改的是当前启用主题目录下的文件
编译前的模板不会执行:模板是数据,不是代码。
即使模板文件被泄露,其中也没有可直接执行的逻辑,更无法访问数据库。