帮助:复杂模板
本文试图从模板的嵌套和解析机制来阐明一些模板制作过程中常见的问题。由于复杂模板的制作千变化万,很难在此处说清楚,也欢迎大家将遇到的问题通过邮件和站内方式告知与我:SerGawen(email:[email protected])。
infobox
Infobox(信息卡)是维基化的重要内容之一,一般指维基页面右侧的长条状卡片,简明概况了该页面的主要资料。
infobox的作用和意义
- 简明扼要的提供页面内容概览
- 维基数据化:信息卡的内容高度浓缩,标准统一,便于被检索、分析和查询。
- 维护修改:对于同一类内容的页面,使用的信息卡是同一个,这样就便于进行整体内容和样式的更改与维护,意义重大。
灰机默认infobox的工作机制
infobox的制作方法和流程不拘一格,这里只讨论huiji默认提供的infobox模板:infobox。其实现方式是通过本模板调取module:infobox逐行打印出,该模板的所有相关组件已经打包在灰机基础包之中,在建站之初如果选择预设的方案会被自动安装:
- 底层渲染
- module:infobox:控制infobox的样式
- module:HtmlBuilder:用以逐行打印infobox的样式(table)
- 主模板:template:infobox,所有的二级infobox均通过此模板生成
- 默认模板:
- template:infobox character:人物infobox模板,其他infobox可以经由此模板改写而来
注意
- 本模板并不实际生成和控制任何样式,样式控制和修改请前往module:infobox
- 查看本维基的infobox模板:category:Infobox templates
- 本维基的infobox是table架构
- 本维基的infobox架构和工作示意图如下:
使用
template:infobox一般来说不要直接使用,而是需要先创建一个分支的infobox模板,例如 infobox country,然后在template:infobox coungry这个页面来设计infobox的布局和内容。
infobox 结构和参数
下面是灰机默认infobox提供的预设参数和使用方法
参数 | 简介 | 预设class |
---|---|---|
title | infobox标题,唯一 | infobox-title |
image | 图片 | infobox-image |
caption | 图片说明文字 | infobox-caption |
headerX | 第X行的分组标题,可多个实例,用序号排序 | infobox-header |
labelX | 第X行的数据标签(左),可多个实例,用序号排序 | infobox-label |
dataX | 第X行的数据内容(右),可多个实例,用序号排序 | infobox-data |
above | 头部内容,唯一 | infobox-above |
below | 尾部内容,唯一 | infobox-below |
追加class | 为title/image/header/label/data等追加class,直接写class名,无需引号 例如 titleclass=title 、labelclass=label-primary 等 |
|
追加style | 为title/image/header/label/data等追加style,直接写CSS,无需引号,例如titlestyle=color:#333; 、abovestyle=display:block; 等 |
示例 |
above | |
title | |
---|---|
image | |
caption | |
headerX | |
labelX | dataX |
below |
注意事项
- header、label、data的序号必须不能重复,例如
| header10 | label11= | data11=
上述写法是合法的
| header10 | label10= | data10=
则不行。
- label可以不写,直接书写dataN=的样式是占满一行
主题配色
由于灰机预设的infobox所有元素都已经预先设置好了class,因此在主题编辑器中可以通过可视化界面来调整配色方案。
深度自定义
配色以外的修改
- 在
common.css
中通过预设选择器修改(对所有使用infobox根模板的分支模板生效) - 在分支模板中通过元素追加class和style来实现(仅对分支模板生效)
- 直接修改
module:infobox
,直接修改lua代码(对所有使用infobox根模板的分支模板生效)
如何转写来自wikia/gamepedia的infobox
一般来说需要建立一个中转模板来传递参数。 你也可以将参数书写为双语模式,实现本地中文参数与英文参数的兼容,例如:
{{{人物|{{{character|}}}}}}
优秀infobox推荐
- 魔戒维基的infobox:lotr:template:infobox character
- 魔兽维基的infobox:warcraft:template:infobox character
- MCU维基的infobox:mcu:template:infobox character
- 红铜智库的infobox:coppermind:template:infobox character
- 小樱维基的infobox:cardcaptorsakura:template:infobox clow card
在可视化编辑器下使用infobox
STEP1 打开可视化编辑器,在上方点击“插入”,选择模板
STEP2 敲入infobox,即可看到已有的各种模板
STEP3 在页面中双击插入的infobox,即可开始编辑字段,可以看到已有的字段,敲入字符会有提示
STEP4 对于已有的内容,点击信息按钮 会有提示文字
STEP5 所有内容编辑完成后,点击保存即可
模板的解析时机
- 解析器标签>parser function(模板,模板参数)>js脚本
结论:在模板函数中使用js是无法工作的。而模板参数没有办法直接传递给解析器扩展标签作为参数使用(因为解析<>的时候还没有开始展开模板参数)
应对方法,对于解析器扩展函数,可以使用{{#tag:}}标签来转译,例如
{{#tag:tab |A |B }}
等价于 <tab>A|B</tab>
家族树模板:Familytree与Chart
- FamilyTree:旧样式的familytree,通过模板驱动打印出table
- Chart:新式familytree解决方案Chart,通过lua模块驱动打印出table,代码完全兼容familytree