Eleventy - 定义摘录的起点和终点

Eleventy - define start and end point for excerpt

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

我试过 Eleventy's docs 方法来解析内容的摘录。但这会解析定界符 .

以上的所有内容

Select 使用 {{ post.data.page.excerpt }}

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

我尝试过的另一种方法是在前端使用一个键来单独指定一个intro/excerpt,但是这种方法不允许我使用现有的内容。

{{ 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 -->
...

如有任何帮助,我们将不胜感激!

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

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;
}

然后你可以在你的 markdown file/s 中添加 <!-- Excerpt Start --><!-- Excerpt End --> 来指定你想将哪部分内容用作摘录。

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

详细分解可以参考上面链接的原博客。

我还测试了一个没有附加功能的简单版本。如果你有兴趣看一看,你可以通过以下方式找到它:https://github.com/enrichdev-en/eleventy-excerpt-example.