Dr. Helga

Dilettanten, olé!

Octopress - Kategorien in Sidebar Anzeigen

Wie man sehen kann, teste ich gerade Octopress.
Out-Of-The-Box gibt es leider bisher keine Möglichkeit, die Kategorien in der Sidebar aufzulisten. Nach kurzem Suchen bin ich aber bei Dan Watson auf eine Lösung gestossen, und nach 5 Minuten hatte ich meine Kategorien in der Sidebar.

Um ein Gefühl für markdown und das bloggen mit Octopress im Allgemeinen zu bekommen, und weil es vielleicht die ein oder andere interessieren könnte, habe ich mir einfach mal die Freiheit genommen Dans Post zu übersetzten.

So here we go:

Zuallerst müssen wir etwas Ruby-Code schreiben. Legt im Plugins-Ordner (source/plugins) eine Datei mit dem Namen category_list_tag.rb an. Dieses Plug-In holt sich die Kategorien aus der Seite und generiert daraus jeweils ein Listitem zu jeder Kategorie.
In Zeile 17 wird dann der category_list tag registriert und der Templating-Engine Liquid zur Verfügung gestellt:

Ein bischen Ruby-Code - category_list_tag.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
module Jekyll
  class CategoryListTag < Liquid::Tag
    def render(context)
      html = ""
      categories = context.registers[:site].categories.keys
      categories.sort.each do |category|
        posts_in_category = context.registers[:site].categories[category].size
        category_dir = context.registers[:site].config['category_dir']
        category_url = File.join(category_dir, category.gsub(/_|\P{Word}/, '-').gsub(/-{2,}/, '-').downcase)
        html << "<li class='category'><a href='/#{category_url}/'>#{category} (#{posts_in_category})</a></li>\n"
      end
      html
    end
  end
end

Liquid::Template.register_tag('category_list', Jekyll::CategoryListTag)

Jetzt wird die Template-Datei category_list.html in source/_includes/asides angelegt. Hier wird der “category_list” Tag verwendet, den wir vorher im Plug-In registriert haben:

Die Template-Datei - category_list.html
1
2
3
4
5
6
<section>
  <h1>Kategorien</h1>
  <ul id="categories">
    {% category_list %}
  </ul>
</section>

Zuletzt muss das neue Template nur noch dem “default_asides”-Eintrag in der _config.yml hinzugefügt werden:

Konfiguration - _config.yml
1
default_asides: [asides/category_list.html, asides/recent_posts.html, asides/twitter.html, asides/delicious.html, asides/pinboard.html, asides/googleplus.html]

Und das war’s auch schon. Nach einem “$ rake generate” sollte der Block mit den Kategorien in der Sidebar erscheinen.

Comments