模板结构、info.json 与标签语法

一、模板目录结构

一个可用的模板至少包含这些文件:

templates/你的模板名/
├── info.json        模板元信息(必填)
├── header.html      公共头部
├── footer.html      公共页脚
├── index.html       首页
├── list.html        列表页
├── detail.html      详情页
├── page.html        单页
├── 404.html         错误页
├── style.css        样式
├── sa.js            交互脚本(可选)
└── lang/
    ├── cn.php       中文词条
    └── en.php       英文词条

模板目录位于 Web 根之外,浏览器无法直接访问源文件;样式与脚本通过模板资源路由输出。

二、info.json

{
    "name": "hardware",
    "title": "五金定制零件外贸询盘模板",
    "type": "template",
    "version": "1.0.0",
    "cms_min_version": "1.0.0",
    "description": "深色工业风,含加工能力、材质表与 RFQ 询盘联动。",
    "author": "LeadoCMS",
    "is_free": false,
    "price": 199
}
  • name 必须与目录名一致
  • version 与 cms_min_version 必须是 x.y.z 语义化版本
  • is_free 为 false 时 price 必须大于 0

三、资源引用

样式和脚本用 {lc:template} 前缀,它会输出当前模板的资源地址:

<link rel="stylesheet" href="{lc:template}style.css">
<script src="{lc:template}sa.js" defer></script>

不要写死 /templates/default/,换模板后就会 404。

四、常用标签

  • {lc:include file="header.html" /} 引入片段
  • {lc:template} 模板资源前缀
  • {lc:breadcrumb} 面包屑
  • {lc:contentlist num="9" page="1"} ... {/lc:contentlist} 内容循环
  • {lc:item.url}、{lc:item.title}、{lc:item.image}、{lc:item.description len="80"} 循环内字段
  • {lc:pagedList} 分页条,{lc:pageinfo} 分页信息
  • {lc:category.title}、{lc:category.description}、{lc:category.body raw="1"} 当前栏目
  • {lc:related num="3"} 相关内容
  • {lc:nav} 导航、{lc:langlist} 语言切换、{lc:hreflang} 多语言互链
  • {lc:site.email}、{lc:site.phone} 站点配置项
  • {lc:phrase.xxx} 界面词条

五、条件判断

只支持结构化比较,不支持写表达式:

{lc:if field="item.image" op="notempty"}
    <img src="{lc:item.image}" alt="{lc:item.title}" loading="lazy">
{lc:else /}
    <div class="card-ph">暂无图片</div>
{/lc:if}

op 支持 ==、!=、>、<、empty、notempty,默认是 ==。

也可以拿词条做条件,用来实现「某个词条留空则整块不输出」:

{lc:if field="phrase.cert_note" op="notempty"}
    <p class="cert-note">{lc:phrase.cert_note}</p>
{/lc:if}

六、词条文件

lang/cn.php 与 lang/en.php 是纯 PHP 数组:

<?php
return [
    'brand_sub'      => '精密制造 · 全球交付',
    'request_quote'  => '立即询价',
    'side_lead_t'    => '交期',
];

模板里用 {lc:phrase.key} 取值。缺键时回退到默认语言,不会报错。

七、换模板

在系统设置的「模板」一项里改模板名即可切换。切换后要重新静态化一次。

模板之间只共享数据,不共享样式,所以换模板不会丢内容。