Переопределение регистра контекста в плагине Jekyll Block - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь получить больше контроля над выдержками из моего поста в Джекилле. Использование кода выдержки по умолчанию в моем случае не очень хорошо работает, так как он (а) должен быть первым абзацем, а (б) по-прежнему отображается на странице. Для большинства моих постов в блоге я хочу либо пользовательский текст, который не должен быть частью настоящего поста в блоге, либо текст, который позже будет опубликован в посте. Я надеялся сделать это с помощью блока, который может дополнительно принимать параметр для визуализации содержимого (хотя я добавлю эту особенность c позже). В настоящее время у меня есть этот плагин для проверки концепции:

require "jekyll"

module Jekyll
  class RenderExcerptBlock < Liquid::Block
    def render(context)
      page = context.registers[:page]
      content = super

      page["excerpt"] = content.lines[0..50]

      content
    end
  end
end

Liquid::Template.register_tag "excerpt", Jekyll::RenderExcerptBlock

, который теоретически позволил бы мне сделать это:

{% excerpt %}
A snippet of this post
{% endexcerpt %}

Однако, это дает ошибку при запуске jekyll build :

  Liquid Exception: Key excerpt cannot be set in the drop. in /Users/nick.chambers/blog/_posts/2020-01-21-unix-shell-scripting-with-bash.md
             ERROR: YOUR SITE COULD NOT BE BUILT:
                    ------------------------------------
                    Key excerpt cannot be set in the drop.

Возможно ли каким-либо образом переопределить значение этого регистра? В качестве альтернативы, есть ли у Джекилла способ достичь этого?

1 Ответ

3 голосов
/ 04 февраля 2020

Jekyll Способ создать пользовательский отрывок для вашего поста (или любого документа в коллекции) состоит в том, чтобы просто добавить его к основному вопросу:

---
title: Test Doc
excerpt: This is a custom excerpt
---

The opening paragraph of this document.

Another paragraph in this document.

Тогда ссылка чтобы отобразить его в макете:

<div class="post-excerpt">
  {{ page.excerpt }}
</div>

или

<div>
{% for post in site.posts %}
  <h2>{{ post.title }}</h2>
  <div>{{ post.excerpt }}</div>
{% endfor %}
</div>
...