跳到主要内容
  1. Posts/

维护日志|No.4:装上RSS了!

No.3 的正式版都没出先把 No.4 写了,这就是我。

·· 1497 字·3 分钟

忍不住鼓捣了一下,Hugo 自带 RSS 功能但这个主题没有准备。主页 description 底下那给各种网站图标留空的一行,主题准备了整整 70 个 svg 图标,但就是没有 RSS。哈哈,好吧,我自己搞!

研究全部基于 Congo 主题的代码,主要记录一下对主题layouts的研究。如果还有任何人用 Congo 的话可以作为参考()。

鼓捣过程 #

先在 Congo 的 GitHub repo 讨论区搜了一下,找到了rss.xml的文件链接,直接抄下来就能用。但咋用呢?

这位仁兄说把index.rss.xml(和上面的rss.xml其实是一个文件,但我完全不知道为何要加上index.的前缀,问了 ChatGPT 也这么说,听 AI 的!)放在themes/congo/layouts/_default里,给我提供了个思路。themes文件夹最好不要乱动,一切都在上级的博客文件夹里覆盖,原因之前折腾了我三小时的翻译问题已经说明了。所以这个index.rss.xml直接放在layouts/_default里就好了。

接下来又咋办呢?现在需要说明一下 Congo 主题的代码了。主页用来放各种图标的那一行,在languages.zh-Hans.toml里是以这样的格式出现的:

links = [ { link = "https://link-to-some-website.com/" } ]

也就是说我想要把 RSS 放进去的话大概是

  links = [
    { link = "https://link-to-some-website.com/" },
    { rss = "某个神秘链接" }
  ]

这样的格式。问题在于这个链接究竟应该放啥,还有我要如何把 RSS 的图标放上去。

通过测试确认linkrss等左侧的变量需要和图标的文件名相同。由于我知道其他已有的图标在themes/congo/assets/icons里,依样画葫芦在assets/icons里放上rss.svg即可。主题官方文档也有说明。

原本这些猜也猜得到,但被 GPT 狠狠误导了,一直在让我找这一行图标的代码在哪里然后手动添加,于是我非常认真地(也没有特别认真吧)研究了一下 Congo 的布局代码,但实际上并不需要,把links这玩意写好就行。总之发现这一行图标的代码应该是在themes/congo/layouts/partials/home/profile.html,这里存储了profile.htmlpage.html两种主页布局,如果要自定义的话估计也是放在这里。在profile.html(我用的布局)里发现这一行代码{{ partialCached "author-links.html" . }},目测就是这一行图标的代码,遂再去找author-links.html。还是好找的,往回走一层就在themes/congo/layouts/partials里,里面有一行{{ partial "icon.html" $name }},同目录下找icon.html看到{{ $icon := resources.Get (printf "icons/%s.svg" ($.Get 0)) }}, 虽然不太懂但看到%s这个也能确认了,以及这里也能看到代码明确规定是icons文件夹里的.svg文件。

上一段真的有人看吗?Anyway,还剩下链接究竟放什么。GPT 苦口婆心跟我说是{ rss = "/index.xml" },但我不知道为什么一直写的/index.rss.xml,要么就是rss.xml,一直在 404。最后还是看了别人的 RSS url 发现后缀显示的都是/index.xml,终于回头是岸。就这样弄好了。

速通总结 #

总结一下很简单但我就是搞了很久,哈哈.jpg。本流程仅适用于 Congo 主题,其他主题……真的还有其他常用主题没有自带 RSS 吗……总之可以作为参考。

  1. config/_default/languages.zh-Hans.toml里(或者你用的任何/全部languages.[语言代码].toml)的links数组里加上{ rss = "/index.xml" }
  2. layouts/_default放上index.rss.xml,内容直接复制粘贴官方即可。
  3. assets/icons里放上rss.svg

拓展阅读:以防有自定义 RSS 输出的需要,放下一篇我找到的博文,有助于理解上述的官方代码。