3

我正在用 Hakyll 做一个网站。我成功创建了一个 RSS 提要,显示每个帖子的预告部分由<!--more-->.

我的问题是这个预告部分显示在这些帖子的完整(模板化)页面中。我只希望那是之后<!--more-->而不是之前。

---
title: My Post
author: JeanJouX
date: 2016-09-06
tags: Haskell
---

The teaser of my post to be shown in the RSS feed. Not in the full page.

<!--more-->

The rest of the post to be shown in the full page of my website

用Hakyll可以做到这一点吗?

4

2 回答 2

4

我不相信Hakyll内置了一种方法来做到这一点。

在我看来,您有两种选择:

  • 编写一个通行证,在将其呈现在自己的页面上之前从文档中去除预告片

  • 将预告片保留在实际页面中,但使用 CSS 将其隐藏

第一个选项可能更好,但需要考虑字符串操作和 Hakyll 编译器。如果您想从一个地方开始,请查看teaserFieldWithSeparator使用needlePrefix函数 fromHakyll.Core.Util.String从文档正文中提取预告片的实现。你必须做相反的事情:提取预告片之外的所有内容。

如果您确实采用了这种方法,则可以将其贡献回 Hakyll,从而为将来想要做同样事情的人节省精力。

另一种选择更hacker但更容易。您可以使用一些 CSS 类将所有预告片包装在 div 中:

<div class="teaser">
Some text.
</div>
<!--more-->

然后,在您的页面模板中,添加隐藏预告段落的 CSS 规则:

.teaser {
  display : none;
}

文本仍在页面的 HTML 中,因此这不是一个理想的解决方案,但您可以使其工作而无需编写任何 Hakyll 代码。

于 2016-09-27T20:28:51.610 回答
0

如果您只是将此预告文本放在单独的元数据字段中,也许会更容易?像

---
title: My Post
author: JeanJouX
date: 2016-09-06
tags: Haskell
description: The teaser of my post to be shown in the RSS feed. Not in the full page.
---

The rest of the post to be shown in the full page of my website

那么你就不需要再这样做teaserField了。你已经拥有了所有你需要的东西$description$,你可以在 rss、html 元标记中,任何地方使用。

于 2017-08-27T21:04:22.793 回答