6

GitHub でブログを維持するためにjekyll-bootstrapを使用しています。

ソートされたtags_listが欲しいです。投稿数が最も多いタグが最初に来ます。次に、最初のタグを大きなフォント サイズで表示し、最後のタグを小さなフォント サイズで表示するディスプレイを作成できます。そしてスプライス機能も欲しい。

python/Jinja2 の場合、次のようなコードが必要です。

{% for tag in sorted_tags[:10] %}
  <li style="font-size:{{ tag.count }}px;">{{ tag.name }}</li>
{% endfor %}

ruby/jekyllで同等の実装は何ですか?

4

4 に答える 4

0

これを行う必要があるのは、タグのリストがリストされているページの 1 か所だけだったので、Jekyll フィルターとして記述しました。

tag_index.html

<h2>Posts by Tag</h2>

<ul class="tags-list">
  {{ site.tags | render_tags_list }}
</ul>

_plugins/filters.rb

module Jekyll
  module Filters
    def render_tags_list(tags)
      sorted_tags = tags.keys.sort_by! { |tag| tag.downcase }

      str = ''
      sorted_tags.each { |tag|
        str << '<li>' + tags[tag].size.to_s + ' - <a href="/tag/' + tag + '">' + tag + '</a></li>'
      }

      str
    end
  end
end

sorted_tags「ビュー」ロジックとプログラミングロジックをより適切に分離したい場合は、フィルターが上に戻るようにすることもできますが、私の場合は非常に単純でした。Liquid テンプレートを使用して特定のキーでハッシュ値に再アクセスしようとするのは、あまり簡潔なプロセスではありませんでした。あるいは単に私のやり方が間違っていたのかもしれませんが、Ruby でははるかに簡単でした。

于 2014-01-02T02:36:11.287 に答える
0

タグ配列がソートされていると思いました。そう仮定すると、これを行うことができます:

{% for tag in site.tags %}
    <li style="font-size: {{ tag[1].size }}px">{{ tag[0] }}</li>
{% endfor %}

それは少しハッキーに感じますが、うまくいくはずです。残念ながら、Liquid では現在、テンプレート内で配列を並べ替えることができません。配列で並べ替えを行いたい場合は、おそらくそのためのプラグインを作成する必要があります。複雑すぎてはいけません。実際、アクセサーを並べ替える既存のプラグインがあります: https://github.com/krazykylep/Jekyll-Sort

于 2012-11-01T21:38:06.443 に答える
0

私は github でブログをホストしていますが、Github ではカスタム プラグインが許可されていないため (jekyll ブートストラップもこれを試みます)、jekyll プラグインを含まないタグ リストをソートするソリューションが必要でした。サイズではなくタグ名で並べ替えているため、ここでの私の投稿は実際には質問に答えていません。このメソッドを適応させて、タグのサイズも文字列に出力し、さらに手の込んだ分割を行って、別の並べ替え順序を取得できます (ただし、面倒です)。

次のコードでこれを行うことができました。

{% capture tagString %}{% for tag in site.tags %}{{ tag[0] }}{% unless forloop.last %}|{% endunless %}{% endfor %}{% endcapture %}
{% assign tags = tagString | split: '|' | sort: 'downcase' %}
<div id="cloud">
  {% for tag in tags %}
  {% assign number = site.tags[tag].size %}
  {% assign slug = tag | downcase | replace: ' ', '_' %}
  <span class="{% if number == 1 %}small{% elsif number <= 5 %}medium{% elsif number <= 10 %}large{% else %}huge{% endif %}">
    <a href="#tag-{{ slug }}">{{ tag | downcase }}</a>
  </span>
  {% endfor %}
</div>

|タグの文字列を (セパレーターとして使用して) キャプチャし、それを使用して配列を作成するので、ちょっと奇妙です。その時点の後 (ループ内) としてタグを参照し、tagそのタグを使用するサイトのリストをとして参照できますsite.tags[tag]

これをブログで使用しています: https://github.com/kelsin/kelsin.github.io/blob/master/tags/index.html

コードの残りの部分は、タグ ページでタグ クラウドを作成するために選択した方法です。これが解決策を探している他の人に役立つことを願っています (プラグインなし)!

于 2014-05-29T19:36:47.553 に答える