3

今日はhttp://bitcoin.org/clients.htmlの Jekyll で簡単なことをしようとしました。

ビットコイン ソフトウェアのリストがあり、そのページが頻繁に再生成されます。露出が均等になるように、クライアントの順序がランダム化されるとよいでしょう。

{% 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」が表示されます...

何か案は?

ありがとう

4

2 に答える 2

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 %}
         ...
于 2012-07-10T10:38:48.633 に答える
3

これは、 Jekyll の「サンプル」フィルターで実現できるようになりました。

たとえば、ランダムに 3 つの投稿を取得するには...

{% assign posts = site.posts | sample:3 %}
{% for post in posts %}
...
{% endfor %}
于 2016-11-23T13:19:48.020 に答える