gpt4 book ai didi

ruby - 使用 Jekyll 和 Liquid 标签的 WordPress 的 body_class 功能

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:18 25 4
gpt4 key购买 nike

我不是 WordPress 的忠实粉丝,但我认为 WordPress 做对的一件事是 body_class 功能。

我想使用 Jekyll 重新创建此功能和 Liquid Tags .我希望能够像这样打电话

<body class="{% body_class %}">

这将自动生成基于以下类的类:

  • 杰基尔模板
  • 当前职位(如果有)
  • 当前页面(如果有)
  • 当前类别(如果有)

例子:

/index.html 使用默认布局会导致

<body class="layout-default page-index">

/_posts/2012-01-01-my-unique-entry.markdown 与 blog.html 布局将导致

<body class="layout-blog post-my-unique-entry">

我知道我可以使用 YAML front matter 实现所有这些,但如果我可以自动执行此操作以删除一个重复的变量,那就太理想了。

根据我目前的尝试,这是我正在采取的策略:

class BodyClassTag < Liquid::Tag

def initialize(tag_name, name, tokens)
super tag_name, name, tokens
end

def render(context)
# Build string from Jekyll instance variables possible here?
end

end

Liquid::Template.register_tag('body_class', BodyClassTag)

关于这是否可能,以及如果可能的话应该结合什么有什么想法吗?

最佳答案

我可能是错的,但我不确定您是否需要为此使用 ruby​​;例如,布局可从 liquid 变量 page 中获得。

所以在你的布局文件中,你可以这样做:

{% capture layout %}{% if page.layout %}layout-{{ page.layout }}{% endif %}{% endcapture %}

<body class="{{ layout }}">

“页面和帖子的唯一标识符”有点复杂,因为 Jekyll 中没有这样的概念。但是您可以使用 page.url 并将斜杠替换为“-”来获得几乎相同的结果。如果您没有看到帖子,那么您看到的是页面。所以:

{% capture id_prefix %}{% if post %}post{% else %}page{% endif %}{% endcapture %}
{% capture id %}{{ id_prefix }}-{{ page.url | replace:'/','-' }}{% endcapture %}

<body class="{{ layout }} {{ id }}">

您可以非常类似地计算类别(请记住,尽管一篇帖子可以有多个类别)。

警告:上面的所有代码都是我凭空想出来的,根本没有经过测试。

关于ruby - 使用 Jekyll 和 Liquid 标签的 WordPress 的 body_class 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9188416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com