0

我正在尝试找到一种方法来选择性地在内容中的某处选择摘录,即能够定义摘录的起点和终点。

我已经尝试过Eleventy 的 docs方法来解析内容的摘录。但这会解析分隔符 <!-- excerpt --> 之上的所有内容。

选择使用{{ post.data.page.excerpt }}

---
pageTitle: blog
tags: posts
---
Everything here is parsed as the excerpt
<!-- excerpt -->
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
...

我尝试的另一种方法是在前面使用一个键来单独指定介绍/摘录,但是这种方法不允许我使用现有内容。

{{ post.data.intro }}

---
pageTitle: blog
tags: posts
intro: This is an excerpt stored in a key
---
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
...

目前有没有办法为要从内容中提取的摘录指定开始和结束分隔符?例如:

---
pageTitle: blog
tags: posts
---
#Heading of the blog

Lorem ipsum, dolor sit amet consectetur adipisicing elit...

<!-- excerptStart -->
This part should be the excerpt of the post
<!-- excerptEnd -->
...

任何帮助,将不胜感激!

4

1 回答 1

0

经过更多研究后,我发现了这个博客,它提供了一个可行的解决方案。

https://keepinguptodate.com/pages/2019/06/creating-blog-with-eleventy/ (感谢原作者)

简而言之,您可以使用“简码”完全控制摘录处理。只需在您的eleventy.js文件中添加此功能。

module.exports = function (eleventyConfig) {
  eleventyConfig.addShortcode("excerpt", article => extractExcerpt(article));
};

function extractExcerpt(article) {
  if (!article.hasOwnProperty("templateContent")) {
    console.warn(
      'Failed to extract excerpt: Document has no property "templateContent".'
    );
    return null;
  }

  let excerpt = null;
  const content = article.templateContent;

  // The start and end separators to try and match to extract the excerpt
  const separatorsList = [
    { start: "<!-- Excerpt Start -->", end: "<!-- Excerpt End -->" },
    { start: "<p>", end: "</p>" },
  ];

  separatorsList.some(separators => {
    const startPosition = content.indexOf(separators.start);
    const endPosition = content.indexOf(separators.end);

    if (startPosition !== -1 && endPosition !== -1) {
      excerpt = content
        .substring(startPosition + separators.start.length, endPosition)
        .trim();
      return true; // Exit out of array loop on first match
    }
  });

  return excerpt;
}

然后你可以在你的降价文件中添加<!-- Excerpt Start -->and<!-- Excerpt End -->来指定你想要使用的内容的哪一部分作为摘录。

要使用摘录短代码,只需添加{% excerpt post %}到主页模板。

您可以参考上面链接的原始博客以获取详细细分。

我还测试了一个没有花里胡哨的简单版本。如果您有兴趣看一看,可以通过:https ://github.com/enrichdev-en/eleventy-excerpt-example 找到它。

于 2021-04-02T19:15:30.300 回答