扩展:Cargo/快速开始指导
假设你想创建一个展示你家里所有藏书的wiki。 你希望你的wiki中有两种类型的页面:书,以及作者。 每个书的页面都应包含书名、作者、类型、出版年份,以及总页数。 每个作者页面应该包含作者的名字、国籍,以及你所收藏的他的作品列表。
创建模板
你所要做的最主要的事情是创建两个模板,一个是书,另一个是作者。 如果你安装了Page Forms插件,你可以使用Special:CreateTemplate或Special:CreateClass来创建模板。 另外如果你还安装了Page Schemas扩展,你可以使用标准的“创建/编辑图式”来创建或重新创建Cargo模板。
当然,你也可以手动创建这些模板。 以下是这两个模板可能的样子:
Template:Book
<noinclude>
这是“书”的模板。
{{#cargo_declare:_table=Books
|Authors=List (,) of Page
|Genres=List (,) of String
|YearOfPublication=Date
|NumberOfPages=Integer}}
</noinclude>
<includeonly>
{{#cargo_store:_table=Books}}
{|
! 作者
| {{#arraymap:{{{Authors|}}}|,|x|{{#formredlink:form=Author|target=x}} }}
|-
! 类别
| {{{Genres|}}}
|-
! 出版年份
| {{{YearOfPublication|}}}
|-
! 总页数
| {{{NumberOfPages|}}}
|}
</includeonly>
Template:Author
<noinclude>
This is the "Author" template.
{{#cargo_declare:_table=Authors
|Country=String}}
</noinclude>
<includeonly>
{{#cargo_store:_table=Authors}}
{|
! Country of origin
| {{{Country|}}}
|-
! Books
| {{#cargo_query:tables=Books|where=Authors HOLDS '{{PAGENAME}}'}}
|}
</includeonly>
做完这些,你现在就有个信息框样式的模板了,该模板既能够定义数据结构还能够以容易查询的方式存储数据。
你可以在此模板中看到调用Cargo的三个主要解析器函数例子:#cargo_declare, #cargo_store, #cargo_query,以及这三者如何相互作用。
尤其注意放置#cargo_declare, #cargo_store的地方:前者是<noinclude>
标签,后者是<includeonly>
标签。
关于这些模板的其他注意事项:
- 对于这两个模板,实体的名称,比如书名或者作者,没有存储在模板中。 这是因为页面自身的名称会存储书或作者的名称——也会存储在这两个表内,在_pageName字段中。
- “Author”最后包含一个聚合查询,也就是查询“Books”表格(由其他模板定义)并获取在“Authors”字段的值中包含当前页面的所有页面的名称。(然后默认就会将信息显示为用逗号分开的列表。)这是一种非常常见的查询类型,意味着你不需要将相同的数据存储在两个不同的页面中,因为一个页面可以简单地查询数据。
- 此示例代码中有一行需要另一个扩展才能工作:Template:Book中的行调用了#arraymap和#formredlink,这两者都由Page Forms 扩展定义。 这一行进行相当复杂的操作:将“{{{Authors|}}}”的值分成一个或更多个子值(由逗号分隔),然后对每个值链接至对应页面(如果那个名称的页面存在),或者链接至使用“Form:Author”的定义表单创建该页面的表单。 因此,此模板假定不仅已安装页面表单扩展,而且已创建“Authors”表单。如果你没有安装页面表单,你可以将这一行换成更简单的东西,例如:
| {{{Authors|}}}
- 然而,强烈建议任何使用Cargo的wiki都使用页面表单。
创建Cargo表
模板创建之后,还有一件简单的事情要做:为每个模板创建Cargo数据库表。 储存模板时并不会自动完成创建。 有两种选项:
- 对于每个模板,在那个模板页面,选择“创建数据表”选项(或者在URL后面加上
?action=recreatedata
),然后按“确定(OK)”按钮。 - 对于命令行,到Cargo的
/maintenance
目录运行“php cargoRecreateData.php
”。
把这其中一个做完,就会创建一个表,表内存储着每个相关模板的数据,你就随时可以点击模板页面的“查看表格”链接看到表的内容。