From d9b5ee10dedb8700480ad924bdf486393bff7f5b Mon Sep 17 00:00:00 2001 From: Samrat Man Singh Date: Wed, 11 Jul 2012 01:16:19 +0545 Subject: [PATCH] moved related_posts to plugin --- pelican/generators.py | 31 +----------------------------- pelican/plugins/related_posts.py | 33 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 30 deletions(-) create mode 100644 pelican/plugins/related_posts.py diff --git a/pelican/generators.py b/pelican/generators.py index 0258543e..58280339 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -346,37 +346,8 @@ class ArticlesGenerator(Generator): self.authors = list(self.authors.items()) self.authors.sort(key=lambda item: item[0].name) - - # related_posts - for article in self.articles: - article.related_posts = [] - relation_score = {} - try: - article_tags = article.tags - for tag in article_tags: - for related_article in self.tags[tag]: - article.related_posts.append(related_article) - article.related_posts.reverse() - - except: # can't find any related posts - pass - #article.related_posts = all_articles[:5].reverse() - - relation_score = dict( \ - zip(set(article.related_posts), \ - map(article.related_posts.count, \ - set(article.related_posts)))) - - ranked_related = sorted(relation_score, key=relation_score.get) - - article.related_posts = ranked_related - - try: # make sure article doesn't appear in its own related posts - article.related_posts.remove(article) - except: - pass - self._update_context(('articles', 'dates', 'tags', 'categories', + self._update_context(('articles', 'dates', 'tags', 'categories', 'tag_cloud', 'authors', 'related_posts')) def generate_output(self, writer): diff --git a/pelican/plugins/related_posts.py b/pelican/plugins/related_posts.py new file mode 100644 index 00000000..25fe2e67 --- /dev/null +++ b/pelican/plugins/related_posts.py @@ -0,0 +1,33 @@ +from pelican import signals + +""" +Related posts plugin for Pelican +================================ + +Adds related_posts variable to article's context +""" +related_posts = [] +def add_related_posts(generator, metadata): + if 'tags' in metadata: + for tag in metadata['tags']: + #print tag + for related_article in generator.tags[tag]: + related_posts.append(related_article) + + if len(related_posts) < 1: + return + + relation_score = dict( \ + zip(set(related_posts), \ + map(related_posts.count, \ + set(related_posts)))) + ranked_related = sorted(relation_score, key=relation_score.get) + ranked_related.reverse() + + metadata["related_posts"] = ranked_related[:5] + + else: + return + +def register(): + signals.article_generate_context.connect(add_related_posts)