首页 / 开发文档 / 模板引擎

模板引擎

标签是怎么编译的、缓存在哪、调试时怎么办。

编译过程

模板源码
   ↓ 按 <script> / <style> 切分
   ↓ 普通片段:编译块标签、单标签、裸变量
   ↓ 脚本片段:只编译 {naicha:...},其余花括号原样保留
   ↓ 生成 PHP
   ↓ 写入 storage/cache/
   ↓ 之后直接执行缓存

缓存策略

  • 缓存文件名由文件内容决定,内容没变就复用
  • 改了模板文件,内容变了,缓存自动失效并重新编译
  • 因此不需要手动清缓存;后台也提供了手动清理入口以备不时之需

为什么要区别对待 script 片段

JavaScript 里大量使用花括号:对象字面量、函数体、模板字符串。 如果一律把 {...} 当成模板变量,JS 会被编译得面目全非。 所以脚本块内只认带 naicha: 前缀的明确标签, 同时给少数几个脚本里确实需要的宿主变量开了白名单。

调试

  1. 页面出现意料之外的字面量 {list.title}:多半是标签名或闭合标签写错了
  2. 循环里取不到值:确认字段确实存在于该标签的作用域,自定义字段记得走 ext
  3. 改了模板没生效:先确认改的是当前启用主题目录下的文件
编译前的模板不会执行:模板是数据,不是代码。 即使模板文件被泄露,其中也没有可直接执行的逻辑,更无法访问数据库。
没找到答案? 可以在 联系我们 留言说明使用场景,我们会补充进文档。