按照官方的示例用Cargo做了几个模板,所以基本上用的都是一些常用功能和参数,哪怕说明文档中介绍过,我也很少去尝试。
下面就是一个很典型的,用参数能解决却被我复杂化的问题。
心百科中,需要显示出某个出版社中收录的书籍数量并带有一个出版物列表的标题。
出版社列表.png
为了方便使用将实现功能的代码做成模板。下面就是我最初的代码,硬编码混合着Cargo的查询。

<h2>出版物列表</h2>
本站目前共收录该出版社的图书 <u>{{#cargo_query:
tables=Book_Info
|fields=COUNT(*)
|where=Publisher LIKE "{{PAGENAME}}"
}}</u> 册。

这种写法在最开始的时候不会存在太大问题,因为通常都是有需要的时候我才会插入模板。再后来尝试将模板嵌入到了表单(Page Forms)中,自此出版物列表的内容就可以自动生成。
这个模板用到现在都很顺利的原因是但凡我要创建一个出版社的条目势必是由于它出版的某部著作被我收录了。直到我开始创建国外出版社的条目。我本意并非想收录国外出版社的著作,而是想对应一下引进书籍的原著版权归属。而我又不希望再开发一个国外出版社的表单,沿用原有的完全够用。那么问题就出现了,该出版社并没有收录任何一本书,却会返回如下的结果。
出版社列表_无内容结果.png
这个结果毫无意义,不是吗?
如果我删除标题下面那段“本站目前共收录该出版社的图书 X 册。”的文字,那么通过判断参数是否为空就能达到不显示任何内容的结果,但是我又希望能够了解共有多少图书已经被我收录了又该怎么办呢?
在重新查看Cargo文档后,我发现其中有两个参数introoutro一直没在其他示例中被用过,但从说明来看似乎能实现我想要的功能。尝试之后,果然可行。修改后的代码如下:

{{#cargo_query:
tables=Book_Info
|fields=COUNT(*)
|where=Publisher LIKE "{{PAGENAME}}"
|intro=<h2>出版物列表</h2>本站目前共收录该出版社的图书 <u>
|outro=</u> 册。
|having=COUNT(*) > 0
|default=
}}

如果有查询记录的话就输出introoutro中的内容,如果没有查询结果的话就不显示任何信息(一定要将defaut=设置为空白,否则默认会输出“没有结果”,那么参数判断还是不为空)。
出版社列表_无内容结果不显示效果.png
如果查询到确实有记录那么还是正常显示标题和内容。

最后修改:2023 年 12 月 17 日
如果觉得我的文章对你有用,请随意赞赏