Index


Wed Jan 7 21:26:16 CST 2026

我有一个 ikiwiki 的网站,我写了个类似 h1title 的插件,想让它在 inline archive 的时候从文章中提取标题而不是直接用文件名当作标题。

但是现在很怪,inline archive 的前十个是可以正常提取标题的,后面的就不行了,就回归到使用文件名当作标题的模式了。不知道为什么。

    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    Posted Thu Jan 1 02:14:05 2026

    CSAPP Data Lab 做题记录(上)
    Posted Sun Dec 28 19:23:58 2025

    CSAPP Data Lab 做题记录(下)
    Posted Sun Dec 28 19:23:58 2025

    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    Posted Sun Dec 28 19:23:58 2025

    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    Posted Sun Dec 28 19:23:58 2025

    从 zerotier 迁移到 headscale
    Posted Sun Dec 28 19:23:58 2025

    重新重新开始
    Posted Sun Dec 28 19:23:58 2025

翻了一会代码之后,发现大概是要打开这个选项:

    raw - Rather than the default behavior of creating a blog, if raw is set to "yes", the page will be included raw, without additional markup around it, as if it were a literal part of the source of the inlining page.

这会让代码走另一条路径,从而触发我的插件。有点神秘了。

好像不太对啊,这样的话它又不会渲染 markdown 了。也不是期望的行为。

    my $needcontent=$raw || (!($archive && $quick) && $template->query(name => 'content'));
    $needcontent = 1;

经常尝试只要让这个 $needcontent 值为 1 就可以解决标题的问题了。

看来首先要把 $quick 给变成 0。然后再试试……

坏了,还是没用。那还得保证 $template query 那个是 1?

Thu Jan 8 20:30:44 CST 2026

哦,最新进展!

template query 是 1 会要求模板文件中有个叫 CONTENT 的变量。在模板中,inlinepage 有这个变量而 archivepage 没有。传入参数有个 archive 会控制它选择 inlinepage 还是 archivepage

我现在完全理解了。

博客归档页面里,第十条之后的页面之所以只能展示文件名而不会展示文章标题,是因为 h1title 插件根本没有生效,没有从文章中提取出标题,所以 ikiwiki 只能回落到文件名。

而 h1title 没有生效则是因为它是一个在处理全文时被调用的钩子函数,归档页面不需要处理文章全文,因此就错过了调用 h1title 的机会。

那为什么前十条页面能够正常显示标题呢?答案是首页会展示十篇文章的完整内容,在渲染这些内容时调用了 h1title,h1title 修改了这些文章的元数据。

最好的修改方式就是在 inline 插件加个强制处理全文的选项。