模板基础语法
墨迹语 CMS 使用自定义模板引擎,语法简洁易用。本文档介绍模板的基础语法规则。
变量输出
转义变量(推荐用于文本内容)
语法:{$变量名}
- 自动对输出内容进行 HTML 转义(htmlspecialchars)
- 防止 XSS 攻击
- 推荐用于用户输入的文本、标题、描述等内容
<h2>{$article.title}</h2>
<p>作者:{$article.author_name}</p>
<span>{$category.name}</span>
不转义变量(用于 HTML 内容)
语法:{!$变量名}
- 直接输出变量内容,不做任何转义
- 用于已经是 HTML 的内容(如富文本编辑器输出)
- 用于可信任的内容片段
<div class="content">
{!$article.content}
</div>
⚠️ 警告:仅对完全可控的内容使用不转义变量,避免 XSS 漏洞!
数组变量访问
当变量是数组时,可以通过点号(.)访问其键值。
语法:{$数组名.键名}
<div class="article">
<h3>{$article.title}</h3>
<time>{$article.published_at}</time>
<p>{$article.description}</p>
<span>{$article.views} 次阅读</span>
</div>
条件判断
简单条件
语法:{if $变量名}...{/if}
{if $article.thumb}
<div class="image">
<img src="{$article.thumb}" alt="图片">
</div>
{/if}
带 else 分支
{if $user.avatar}
<img src="{$user.avatar}" class="avatar">
{else}
<img src="/default-avatar.png" class="avatar">
{/if}
取反条件
语法:{if !$变量名}...{/if}
{if !$articles}
<p class="empty-tip">还没有发布任何文章</p>
{/if}
比较运算符
支持 ==、!=、<、>、<=、>=
{if $article.status == 'published'}
<span class="status">已发布</span>
{/if}
{if $article.views > 1000}
<span class="popular">热门</span>
{/if}
循环语法
语法:{loop $数组名 $项目名}...{/loop}
{loop $articles $article}
<div class="article-item">
<h3>{$article.title}</h3>
<p>{$article.description}</p>
<time>{$article.published_at}</time>
</div>
{/loop}
循环中的条件
{loop $articles $article}
<div class="article">
<h3>{$article.title}</h3>
{if $article.thumb}
<img src="{$article.thumb}">
{/if}
{if $article.status == 'published'}
<span class="status">已发布</span>
{/if}
</div>
{/loop}
模板包含
语法:{include file="模板文件路径"}
{include file="common/header.html"}
{include file="common/footer.html"}
特殊变量
BASE_URL
自动注入的全局变量,表示网站的基础 URL:
<a href="{$BASE_URL}/articles">文章列表</a>
<img src="{$BASE_URL}/images/logo.png">
限制和约束
不支持的语法
- ❌ 逻辑运算符(
&&、||)- 使用嵌套条件替代 - ❌ 三元运算符 - 使用条件标签替代
- ❌ 函数调用(除了
Url::类方法) - ❌ 复杂的数组访问(多层嵌套)
- ❌ 变量赋值
变量命名规范
- 变量名只能包含字母、数字、下划线
- 变量名开头必须是字母或下划线
- 不支持
-或其他特殊字符
提示:
更多详细信息请查看 模板标签系统 文档。