Get the Post ID and Content From Posts in Octopress/jekyll Plugins

In Octopress oder Jekyll ist es alles andere als leicht einen Post eindeutig zu identifizieren. Doch grade bei manchen Plugins ist es noetig wenn es weiss, in welchem Beitrag es sich befindet.

Ich bin bei der Programmierung meines Appbox Plugins auf dieses Problem gestossen. Ich wollte jedes Cachefile fest an einen Post binden. Das war notwendig, damit man auch fuer zukuenftige Beitraege fuer eine App ein neues Cachefile generieren kann auch wenn es bereits eines gibt. Bezieht man sich nur auf die AppID, greift das Plugin auch bei zukuenftigen Beitraegen immer auf das alte Cachefile zurueck. Das birgt dann Probleme, wenn sich Grafiken, Preise, Ratings oder aehnliches geaendert haben.

Wie also an die PostID oder einen eindeutigen Schluessel bezogen auf den jeweiligen Beitrag gelangen?

Abhilfe schafft hier der context Hash von Octopress. In der render Methode eines Plugins wird der Parameter context uebergeben. In diesem Hash findet man ueber den Zugriff auf die Keys context["page"]["id"] die jeweilige ID des Posts heraus der gerade vom Plugin verarbeitet wird. Das bedeutet, dass alle notwenigen Methoden zum generieren oder aufrufen von Cachefiles in der render-Methode aufgerufen werden muessen.

Des weiteren besteht auch hier die Moeglichkeit, so an den Content des jeweiligen Posts zu erhalten. Dazu laedt man einen Hash mit allen Posts, und vergleicht diesen mit der ermittelten Id wie oben beschrieben. Hier gibt es dann die Moeglichkeit auf alle Informationen des Posts zuzugreifen.

Eine Beispielhafte render Methode koennte wie folgt aussehen:

1
2
3
4
5
6
def render(context)
  # Get the current post's post object
  id = context["page"]["id"]
  posts = context.registers[:site].posts
  post = posts [posts.index {|post| post.id == id}]
end

Die Methode holt sich die Id des Posts, und speichert diesen in id. Dann vergleicht es alle Posts in context.registers[:site].posts mit der gefundenen Id und gibt den Inhalt des gefundenen Posts zurueck.

Bis jetzt ist dieses Vorgehen leider noch unzureichend dokumentiert. Daher hoffe ich, dass mein Beitrag Aufschluss gibt.

Comments

GitHub Repos

  • Status updating...