Mik*_*ema 3 ruby liquid jekyll
具体来说,我希望每次生成时都在页面上以随机顺序列出数组的内容.
所以,鉴于page.array = [1, 2, 3]以下内容:
{% for i in page.array %}
<p>{{ i }}</p>
{% endfor %}
<!--
Yields:
<p>1</p>
<p>2</p>
<p>3</p>
-->
Run Code Online (Sandbox Code Playgroud)
我如何随机化该订单?(希望语法有点像以下)
{% for i in page.array.shuffle %}
<p>{{ i }}</p>
{% endfor %}
<!--
Yielding something like this, or a random reordering:
<p>3</p>
<p>1</p>
<p>2</p>
-->
Run Code Online (Sandbox Code Playgroud)
我设法通过Jekyll的插件系统添加自定义过滤器来实现这一目标:
# _plugins/shuffle.rb
module Jekyll
module ShuffleFilter
def shuffle(array)
array.shuffle
end
end
end
Liquid::Template.register_filter(Jekyll::ShuffleFilter)
Run Code Online (Sandbox Code Playgroud)
并使用:
{% assign shuffled_array = page.array | shuffle %}
{% for i in shuffled_array %}
<p>{{ i }}</p>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
在目前接受的答案使用自定义过滤器,但是这是不可能的一些常见的杰基尔环境中,如GitHub的页面。
在 GitHub Pages上可行的一个简单解决方法是使用Jekyll 的sample过滤器并将其传递size给数组。例如,这是一个 Markdown 格式的 Jekyll 模板,它将在每个 Jekyll 构建中以随机顺序打印您的 Jekyll 博客文章的标题:
---
title: Posts in random order
---
{% assign n = site.posts | size %}
{% assign posts = site.posts | sample: n %}
{% for post in posts %}
* {{ post.title }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1080 次 |
| 最近记录: |