2.4 语言包与 DIY 区域
把文案抽出来可翻译,把版面留给站长自己摆。
{lang key} 调用语言包
模板里不该硬写中文。Discuz! 把文案集中放进语言包文件,模板里只写 key:
{lang submit}
{lang reply}
<button>{lang post}</button>
{lang xxx} 会去 source/language/ 下找对应语言包,命中就替换成当前语言的文本。官方模板里所有面向用户的按钮、提示、标题都走这个标签,换语言时只换语言包文件,不碰模板。
自己加 key 也可以:把新 key 写进对应模块的语言包文件(source/language/ 下按模块分子目录),模板里直接 {lang 你的key} 调用。key 建议用小写英文单词或下划线组合。漏写 key 不报错,编译器找不到就原样输出 {lang xxx},页面上见到这一串就说明语言包里缺这一项。
模板自己的语言包:X5 的新写法
X5.0 给模板单独准备了语言包扩展文件 /template/i18n/SC_UTF8/lang_template.php,内容就是一个 $lang 数组:
$lang = [
'nice' => '不错!',
'welcome' => '欢迎回来,%s',
];
写好后模板里直接用 {lang nice}、{lang welcome}。
目录名里的 SC_UTF8 表示简体中文 UTF-8 编码。Discuz! 靠路径里的编码标记区分语言版本,同一套模板要支持多语言,就为每种编码各放一份:SC_UTF8 简体 UTF-8、SC_GBK 简体 GBK、TC_UTF8 繁体 UTF-8。
这个 lang_template.php 是 default 套系共用的位置;你自己的套系要放在自己目录下,即 /template/xxx/i18n/SC_UTF8/lang_template.php,与默认套系互不干扰。官方也支持 /template/xxx/i18n/en/lang_template.php 放英文版本。
XML 里的字段也能进语言包
X5 的模板变量机制完全复刻了插件变量机制,模板可以自带参数配置后台。这里有个便利:模板导出的 XML 里,某些字段能直接写进 $lang,不用手工再抄一遍。
| XML 字段 | 对应文案 | 出现在后台哪里 |
|---|---|---|
name |
模板名称 | 模板列表 |
tplname |
模板说明 | 模板详情 |
copyright |
版权信息 | 模板详情 |
version |
版本标记 | 模板详情 |
var.title |
变量项标题 | 变量配置页 |
var.description |
变量项说明 | 变量配置页 |
var.extra |
变量项额外说明 | 变量配置页 |
后三个属于分支路径,在 XML 里用点号或斜杠表示层级(以你导出的 XML 结构为准)。在这些位置直接填中文或英文,导出后后台显示的就是它,同时进了语言包,多语言时能一并替换。
开启开发者模式才看得见变量页
模板变量配置后台默认是隐藏的,在 config/config_global.php 末尾加下面这行开启开发者模式才会出现:
$_config['plugindeveloper'] = 1;
开启后后台模板列表会出现「设计」按钮,点进去就是变量配置页,变量类型与插件变量一致。X5 新增了两个布局分类:标题栏(给多个设置项加小标题,纯展示)和分组(多页切换)。用分组时有个硬性要求——顺序第一个项目必须是分组类型,否则后台排不出来。导出的 XML 里会包含这些模板变量,可以在 style 分支里写 version 标记版本变化。
DIY 区域:一行标记 + 一个容器
DIY 是 Discuz! 门户的特色功能:页面区块由站长自己在后台拖拽添加,模板负责给出「这里可被占用」的标记。一个 DIY 区域由两部分组成——一行标记和一个带 id 的空容器:
<!--[diy=diy1]--><div id="diy1" class="area"></div><!--[/diy]-->
注意这个写法在真实文件里是 HTML 注释形态(上文写成 < > 只是为了在文档里显示),两处标记都是注释,浏览器不渲染它们。真正的可见内容全在那个 div 里,编译后会被填入站长在后台配置的区块。
三处细节不能错:注释里的 diy= 值必须和 div 的 id 一致,都写 diy1,不一致后台就找不到这个区域;class="area" 要留着,后台编辑界面的定位和样式依赖它;diy 后面的编号自己定,同一页面可以有 diy1、diy2、diy3,只要不重复。
常见错误是只写了 div 没写标记,或只写了标记没写 div——两种情况页面都能打开,但后台 DIY 面板里没有对应的添加入口。
DIY 与后台的对应关系
模板里每个 DIY 标记,在后台都会变成一个可选区域。站长进后台 → 门户 → 页面 diy 管理,把模块拖到这些区域里,可以放文章、单页、公告、幻灯片、友情链接、外部页面等等。区块内容存在 pre_portal_* 系列数据表里(安装时表前缀可改,官方文档写作 cdb_),字段以官方数据字典为准。模板侧的 diyxml 放在 template/{标识}/portal/ 目录,它是门户页面的结构定义文件。
X5 支持手机版 DIY
X5.0 起手机版也支持 DIY 了,做法和普通版一样,在 touch 目录下的模板里按同样方式写:
<!--[diy=diytouch]--><div id="diytouch" class="area"></div><!--[/diy]-->
template/{标识}/touch/ 是手机版模板目录,里面的页面同样要留出 DIY 插槽,后台配置的内容才能在手机端显示。漏了 touch 下的标记,手机版就没法 DIY。
页面组件与模块组件导出
X5 还新增了组件导出功能,做模板分享时很有用:
| 类型 | 导出目录(xxx 换成你的标识) |
预览图 |
|---|---|---|
| 页面组件(整页 DIY) | /template/xxx/portal/diyxml/page/ |
同名 .jpg,尺寸 80×60 |
| 模块组件(DIY 框架) | /template/xxx/portal/diyxml/module/ |
同名 .jpg,尺寸 80×60 |
用户安装你的模板后,在任何模板下做 DIY 都能看到这些可导入的组件;预览图按指定尺寸做好,否则列表里是空白缩略图。
{block} 与 DIY 的关系
DIY 是「给站长摆的容器」,而 {block article}、{block list} 是模板主动调用某个 DIY 数据模块的标签。前者等着被填,后者主动取数据。做门户模板时两者配合:页面骨架用 DIY 标记分块,具体区块内部再用 {block} 拉内容。
小结
{lang key} 调用 source/language/ 下的系统语言包;模板自己的文案写进 /template/{标识}/i18n/SC_UTF8/lang_template.php 的 $lang 数组,XML 的 name、tplname、copyright、version、var.title、var.description、var.extra 也能进语言包。DIY 区域是「一行 HTML 注释标记 + 一个带 id 的 .area 容器」,两者名称必须一致;后台对应门户 DIY 管理,数据落在 pre_portal_* 表。X5 起 touch 目录下同样支持 DIY,别漏了手机版。
