【问题标题】:Split single file to multiple "posts" in Hugo?在 Hugo 中将单个文件拆分为多个“帖子”?
【发布时间】:2021-11-18 02:55:45
【问题描述】:

Hugo 的单文件->单页模型非常简单,尤其是对于博客而言。但有时您想为博客写一篇“文章”,然后将其分成 2 篇或更多篇以用于不同的页面(可能在不同的日子发布,或其他)。

有没有办法在 Hugo 中做到这一点?也许是您在页面内的布局/主题/简码和内部标记中放置的东西的组合(以指示在哪里拆分文章)?

可能的模型可能包括:

  • 当站点构建为public 时,1 个输入帖子“拆分”为 2/3/4 个帖子
  • 当网站构建为public 时,1 个输入帖子被复制为 2/3/4 个帖子,但不知何故,每个重复不是 精确 重复,而是包含整个帖子但某些部分帖子的部分通过 CSS 隐藏/不可见,因此它们代表帖子的 2/3/4“页面”。

或者,这是你在 Hugo 之外做的事情吗?

更新:我知道我需要澄清这一点。考虑一下random illustrative blog post - 这是三个密切相关的帖子中的第三个,甚至在顶部有一组链接,因此您可以找到该系列中较早的帖子。很多技术博客都在做这种事情(至少是我读过的)。

现在,我不是在寻找 CMS 或任何复杂的东西。我现在用 Hugo 做的是hugo new posts/an-article-about-constexpr.md,我写了一个降价文件,它变成了一个标准 Hugo 时尚的“帖子”。正是您希望 SSG 做的事情。

想要做的是编写一个降价文件,但其中有某种标记将其分成几个部分(如类固醇上的<!-- More -->),而不是生成我网站的一页它生成三个(在本例中) - 三篇单独的文章,其中包含来自“帖子”部分中主页的链接等。对于奖励积分,我想生成这些带有链接的“目录”部分每一页。

所以我一直在使用拼凑而成的 awk 脚本来执行此操作,该脚本在帖子目录中的帖子旁边生成页面。我将帖子设置为草稿,因此它不会被发布,但 awk 脚本生成的页面有 draft=false 所以它们确实会被发布。并且日期已设置好,因此它们是“有序的”。

这很有效,但在我投入更多时间在我的小脚本上之前,我想看看是否有 适当的方法可以在 inhugo 中执行此操作。 p>

【问题讨论】:

  • 根据您要执行的操作,您可能需要考虑将帖子存储为结构化数据并使用Data Templates
  • 对我来说,这似乎是三个独立的帖子,也许还有另一个帖子作为摘要,其中包含指向其他帖子的链接。在这种情况下,目录可以被视为子菜单。在 Hugo 中,使用页面包是处理它的一种方法。但我认为,正如您所意识到的,CMS 将为您提供执行您所描述的工作的工具——跨项目/实体维护数据。我不希望 Hugo 以同样的方式在本地工作。

标签: hugo


【解决方案1】:

不确定您所说的单文件->单页模型是什么意思。 我在任何 Hugo 网站中都很少有一个降价文件=一个呈现 html 页面的部分。

可能只是我构建的方式,但到目前为止我所做的一切都是香草雨果。

回答你的问题:是的,你是对的,这会起作用。有几种方法可以做到这一点(我在下面列出了一个),但也许更深入的了解是将“工具链”的概念和 Hugo 在该工具链中的概念与 CMS 分开,而 Hugo 不是。

所以,尽管回答您的具体问题:

  1. 您可以将内容存储在 markdown、markdown front matter 或 hugo 中的数据表单 (XML/JSON) 中。使用页面资源 {{ .GetPage }} 您可以访问任何内容并将其加载到任何模板或使用简码,将其加载到其他降价中。

  2. 如果我需要将其作为工具链的一部分来执行,即使用特定的降价并在多个地方重复使用它,我会根据我在哪里需要的分组创建一个前端变量、分类法或标签,所以这是可扩展的。参数如
    “文章作者:Jessie P.” “日期:这里的日期” “标签:等等等等”

然后假设我知道这将是一个博客,很好,那么它将在相应的内容文件夹中,但是如果我需要 Jessie 的所有文章,或者那个日期的文章,或者那个特定的文章,我会使用我制作的简码或直接在模板中,使用 .GetPage Match - 根据我需要的参数导入我需要的降价页面。

但另一方面,我需要了解正在解决的问题,但是,这里有一些 hugo 文档可以帮助您:

https://gohugo.io/functions/getpage/#readout
https://gohugo.io/content-management/page-bundles/

请记住,Hugo 不是 CMS,它是一个站点生成器。如果您想要一个 CMS,您可以随时使用 Wordpress headless 或任何其他解决方案。

(在我脑海中使用页面包)

{{ $headlessBundle := .Site.GetPage "/blogs/specific-blog/index" }}   
{{ with $getContent := $headlessBundle.Resources.Match "intro.md" }}  
{{ (index $getContent 0).Content }}  

(您可以使用各种“Where”语句根据参数“过滤”内容,或者根据您想要的内容进行描述)。

或者例如,如果我只想要带有 H1 标签的文本:

{{ $.Scratch.Set "summary" ((delimit (findRE "(<h1.*?>.*?</h1>\\s*)+"    .Content) "[&hellip;]") | plainify | replaceRE "&amp;" "&" | safeHTML) }}
{{ $.Scratch.Get "summary" }}  

根据问题的更新: https://discourse.gohugo.io/t/split-markdown-content-in-two-files-but-dont-render-shortcodes-as-raw-text/32080/2
https://discourse.gohugo.io/t/getting-a-list-from-within-a-shortcode/28126
https://discourse.gohugo.io/t/splitting-content-into-sections-based-on-header-level/33749
https://discourse.gohugo.io/t/multiple-content-blocks-on-a-single-page/9092/3

jrmooring 用清晰的示例和代码在上面给出了最好的回答。

不过,请注意:如果我在技术博客中这样做,这将被集成到 CMS 中并与构建器协调。

【讨论】:

  • 我已经用一个例子来澄清我的要求。我想我最初写的很糟糕,因为您的有趣建议似乎更多是为了获取内容片段并在多个地方使用它们。我更喜欢将一篇大文章放在一个文件中(这样我可以方便地查看整个内容),但将其发布为三篇单独的文章,part1、part2 和 part3。例如。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
相关资源
最近更新 更多