本文试图从模板的嵌套和解析机制来阐明一些模板制作过程中常见的问题。由于复杂模板的制作千变化万,很难在此处说清楚,也欢迎大家将遇到的问题通过邮件和站内方式告知与我:SerGawen(email:ga@huiji.wiki)。

infobox

Infobox(信息卡)维基化的重要内容之一,一般指维基页面右侧的长条状卡片,简明概况了该页面的主要资料。

infobox的作用和意义

  • 简明扼要的提供页面内容概览
  • 维基数据化:信息卡的内容高度浓缩,标准统一,便于被检索、分析和查询。
  • 维护修改:对于同一类内容的页面,使用的信息卡是同一个,这样就便于进行整体内容和样式的更改与维护,意义重大。

灰机默认infobox的工作机制

infobox的制作方法和流程不拘一格,这里只讨论huiji默认提供的infobox模板:infobox。其实现方式是通过本模板调取module:infobox逐行打印出,该模板的所有相关组件已经打包在灰机基础包之中,在建站之初如果选择预设的方案会被自动安装:

注意

  • 本模板并不实际生成和控制任何样式,样式控制和修改请前往module:infobox
  • 查看本维基的infobox模板:category:Infobox templates
  • 本维基的infobox是table架构
  • 本维基的infobox架构和工作示意图如下:

Infobox架构.png

使用

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=titlelabelclass=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

插入模板
查询模板
编辑模板字段
模板信息

STEP1 打开可视化编辑器,在上方点击“插入”,选择模板

STEP2 敲入infobox,即可看到已有的各种模板

STEP3 在页面中双击插入的infobox,即可开始编辑字段,可以看到已有的字段,敲入字符会有提示

STEP4 对于已有的内容,点击信息按钮 会有提示文字

STEP5 所有内容编辑完成后,点击保存即可

infobox中的模板数据(templatedata)

模板功能信息、模板参数信息都是通过插件templatedata生成的,需要模板制作者手动填写

  • 灰机使用的默认模板和各大维基的模板都进行了说明文字的补写,但仍有一些infobox和其他网站来源的模板是没有此部分信息的
  • 如果您想制作一个新的infobx或者其他模板,最好补全templatedata以便其他用户使用

模板的解析时机

  • 解析器标签>parser function(模板,模板参数)>js脚本

结论:在模板函数中使用js是无法工作的。而模板参数没有办法直接传递给解析器扩展标签作为参数使用(因为解析<>的时候还没有开始展开模板参数)

应对方法,对于解析器扩展函数,可以使用{{#tag:}}标签来转译,例如

{{#tag:tab
|A
|B
}}

等价于 <tab>A|B</tab>

家族树模板:Familytree与Chart

  • FamilyTree:旧样式的familytree,通过模板驱动打印出table
  • Chart:新式familytree解决方案Chart,通过lua模块驱动打印出table,代码完全兼容familytree

段落书写与debug

模板说明文档的撰写

通过templatedata撰写

通过documentation撰写(推荐)


复杂模板的设计

avatar