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://keeperuptodate.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 に答える