12

私の理解では、Liquid はタグで使用するために Ruby ハッシュを配列に変換します。たとえば、Jekyll を使用する場合:

{% for category in site.categories %}
    <li>{{ category[0] }}</li>
{% endfor %}

... site.categories を [0] がキー、[1] が値のリストを表すタプルの配列に変換します。

上記のカテゴリ マップをキー (各タプルの [0]) でアルファベット順に並べ替えたい場合、どうすればよいでしょうか?

4

8 に答える 8

8

ハッシュの代わりに配列を使用することもできます!

この yaml を使用する代わりに:

categories:
  a_category: category description
  another_category: another category description

これを使用できます:

categories:
  - {name: 'a category', description: 'category description'}
  - {name: 'another category', description: 'another category description'}

そして、このように繰り返すことができ、順序は保持されます:)

{% for category in site.categories %}
  <li>{{ category['name'] }}</li>
{% endfor %}
于 2012-08-18T12:41:36.783 に答える
4

アルファベット順に並べ替えられたタグによる投稿のインデックス (タグ名にスペースは使用できません):

{% capture tags %}
  {% for tag in site.tags %}
    {{ tag[0] }}
  {% endfor %}
{% endcapture %}
{% assign sortedtags = tags | split:' ' | sort %}

{% for tag in sortedtags %}
  <h4>#{{ tag }}</h4>
  <ul>
  {% for post in site.tags[tag] %}
    <li>
      <span>{{ post.date | date_to_string }}</span>
      <a href="{{ post.url }}">{{ post.title }}</a>
    </li>
  {% endfor %}
  </ul>
{% endfor %}
于 2013-08-14T00:47:45.440 に答える
3

次の方法を使用してキーで並べ替えることができます (Github Pages と互換性があります)。

{% assign sorted_categories = (site.categories | sort:0) %}
{% for category in sorted_categories %}
   <!-- Using the 'capitalize' filter in Liquid Tags - you can leave this out -->
   <li>{{category[0] | capitalize }}</li>

   {% assign sorted_catposts = (category[1] | sort: 'title', 'last') %}
   {% for catpost in sorted_catposts %}
     <!-- The posts within each category are now alphabetically sorted by title -->
     <!-- Do stuff with each post in each category -->
   {% endfor %}
{% endfor %}

お役に立てれば。

于 2014-10-27T00:12:29.013 に答える
2

手間を省いて拡張Liquidできます:

例えば

# https://gist.github.com/dnozay/026862f5d65dcb8b4353

module Jekyll
  module Toolbox
    def keys(hash)
      hash.keys
    end
    def to_ul(collection)
      result = ''
      collection.each do |item|
        result << "<li>#{item}</li>"
      end
      result
    end
  end
end

Liquid::Template.register_filter(Jekyll::Toolbox)

使用法:

{{ myhash | keys | to_ul }}

例:

# https://gist.github.com/dnozay/026862f5d65dcb8b4353

@context = { 'myhash' => { 'b' => 'B', 'a' => 'A', 'c' => 'C' } }
@template = Liquid::Template.parse("{{ myhash | keys | to_ul }}")
@template.render(@context)  # => "<li>b</li><li>a</li><li>c</li>"
@template = Liquid::Template.parse("{{ myhash | keys | sort | to_ul }}")
@template.render(@context)  # => "<li>a</li><li>b</li><li>c</li>"

運が良ければ、github でfor.rbファイルを探し、構文を拡張してforハッシュをより適切に処理できます:)。

于 2014-10-24T22:35:19.210 に答える
1

デフォルトのLiquid実装も、Jekyllによる追加も、あなたが望むものを許可していません。

残念ながら、現在の設定では、あなたが望むことは単に不可能です。ハッシュがソートされた順序でキーを返すようにするには、Jekyll または Liquid にモンキーパッチを適用する必要があります。

于 2011-06-19T18:01:10.583 に答える
0

ニコスの問題を修正した方法は次のとおりです。

{% capture get_items %}
   {% for cat in site.categories %}
    {{ cat | first | replace: ' ', '_' }}
   {% endfor %}
{% endcapture %}
{% capture num_words %}
  {{ get_items | split:' ' |  sort | join:' ' | number_of_words }}
{% endcapture %}
{% for item in (1..num_words) %}
  <li>{{ get_items | split:' ' |  sort | join:' ' | truncatewords:item | remove:'...' | split:' '  | last | replace: '_', ' ' }}</li>
{% endfor %}

これをHAMLで動作させる方法...

于 2012-07-19T02:04:53.983 に答える