我今天花了很多时间尝试用Jekyll为http://bitcoin.org/clients.html
做一些简单的事情我们有一个比特币软件列表,每隔一段时间该页面就会被重新生成。如果客户的订单被随机化以获得相同的曝光,那将是件好事。
{% random page.clients %}
{% for client in page.clients %}
...
我确信这很简单:
class Random < Liquid::Tag
def initialize(tag_name, collection_name, tokens)
@collection_name = collection_name.to_s
super
end
def render(context)
collection = context[@collection_name]
collection = collection.sort_by{rand}
context[@collection_name] = collection
super
end
end
Liquid::Template.register_tag('random', Random)
为什么不起作用?我看到绝对没有变化。
我假设我没有正确分配给page.clients,因为如果我尝试:
context[:foo] = collection
{% random page.clients %}
{% for client in page.clients %}
...
然后我得到一个空白页面。但是打印@collection_name会显示“page.clients”...
有什么想法吗?
由于
答案 0 :(得分:3)
class Random < Liquid::Tag
Syntax = /(\w+[.]?\w+)\s+(\w+)/o
def initialize(tag_name, markup, tokens)
if markup =~ Syntax
@collection_name = $1
@randomized_name = $2
else
raise SyntaxError.new("Syntax Error in 'random' - Valid syntax: random [source] [var]")
end
super
end
def render(context)
collection = context[@collection_name]
collection = collection.sort_by{rand}
context[@randomized_name] = collection
return
end
end
Liquid::Template.register_tag('random', Random)
和
{% random page.clients clients %}
{% for client in clients %}
...
答案 1 :(得分:2)
现在可以使用Jekyll "sample" filter ..
来实现例如,随机获得3个帖子......
{% assign posts = site.posts | sample:3 %}
{% for post in posts %}
...
{% endfor %}