最近连着两天都发现这种情况了。说起来也很简单,就是在我的图书页面中突然冒出目录来了,要知道之前一直是好好的,看看具体表现:
图书页面显示目录_Timeless.png
如果是匿名用户浏览还算好,因为默认是Timeless主题,但是我日常编辑使用的是Vector主题,结果就是这个样子:
图书页面显示目录_Vector.png
排版都乱了。
解决办法说起来也不复杂,无非就是添加一个__NOTOC__的魔术字。我之前是在设计表单(Page Forms)的时候加过魔术字,可能是方法不对,但没有暴露出来。量小手动加一下也倒无所谓,不过编辑的时候看着总觉得别扭,凭什么其他页面都没有就为数不多的几个要多个尾巴呢?况且这种莫名奇妙出现的问题,谁知道后面还会不会出现。

就在我以mediawiki auto add __NOTOC__ pageforms等关键词上网查找解决方案的时候,Chatgpt(免费的3.5版)竟然给出了好几个,来看看具体内容。

Chatgpt的回答

在MediaWiki中自动添加__NOTOC__并使用PageForms插件的问题可能涉及到在表单创建或编辑页面时自动添加该标签。以下是一些可能的步骤,但请注意,这可能会因MediaWiki版本和插件版本而异。

  1. 使用PageForms表单:
    在PageForms表单定义中,您可能可以直接添加__NOTOC__标签。例如:

    {{{info|label=Your Form|alias=your_form}}}
    {{{standard input|id=notoc|label=Do not display table of contents|default=__NOTOC__}}}
    {{{standard input|...other form inputs...}}}

    这将在表单提交时自动在页面中添加__NOTOC__

  2. 使用PageForms钩子:
    在LocalSettings.php中添加自定义的PageForms钩子,以便在表单提交时修改页面内容。这可能需要一些编程知识。

    $wgHooks['PageFormsSubmitComplete'][] = 'onPageFormsSubmitComplete';
    
    function onPageFormsSubmitComplete(&$form, &$page, &$editInfo) {
        // 检查是否应添加__NOTOC__
        if ($form->getInputData('notoc') == '__NOTOC__') {
            $page->mContent->insertTags('__NOTOC__', $page->mRevision->getId(), EDIT_UPDATE);
        }
    }

    这是一个简单的示例,可能需要根据您的具体需求进行修改。

  3. 自定义编辑模板:
    如果您使用了自定义编辑模板,您可以在模板中添加__NOTOC__。编辑模板通常用于在页面保存时添加特定的内容。

    <includeonly>__NOTOC__</includeonly>
    ...其他编辑模板内容...

请确保在进行这些更改之前备份您的MediaWiki站点,并确保您了解您正在使用的MediaWiki版本和PageForms插件版本的特定要求。

解决情况

最终选择了第三种,因为最简单也最实用(至少就我目前的情况来说)。甚至对很多玩MediaWiki的朋友来说,这可能都算不上什么,但有时候最简单的答案或许在网上要搜好久。
图书页面不显示目录_Vector.png
事后分析,为什么最近几天才出现这样的问题,大概是因为我新添加了一个模板用于呈现不同版本的其他书籍,而同名书籍一旦很多,超出现有页面的长度之后,MediaWiki就会自动添加目录,以方便快速定位到后面,但却破坏了我原有的排版。

我没去验证其他方法,但不管最终是否可行,至少在某些方面,Chatgpt还是给出了一些解决思路的,最重要的是它给我的是中文答案。

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