mirror of
https://github.com/moparisthebest/android.moparisthebest.org
synced 2024-12-23 16:08:53 -05:00
Merge pull request #201 from mikl/category-feeds
Adds per-category Atom feeds.
This commit is contained in:
commit
d84daa2a88
27
.themes/classic/source/_includes/custom/category_feed.xml
Normal file
27
.themes/classic/source/_includes/custom/category_feed.xml
Normal file
@ -0,0 +1,27 @@
|
||||
---
|
||||
layout: nil
|
||||
---
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
|
||||
<title><![CDATA[{{ page.title }} | {{ site.title }}]]></title>
|
||||
<link href="{{ site.url }}/{{ page.feed_url }}" rel="self"/>
|
||||
<link href="{{ site.url }}/"/>
|
||||
<updated>{{ site.time | date_to_xmlschema }}</updated>
|
||||
<id>{{ site.url }}/</id>
|
||||
<author>
|
||||
<name><![CDATA[{{ site.author | strip_html }}]]></name>
|
||||
{% if site.email %}<email><![CDATA[{{ site.email }}]]></email>{% endif %}
|
||||
</author>
|
||||
<generator uri="http://octopress.org/">Octopress</generator>
|
||||
|
||||
{% for post in site.categories[page.category] limit: 5 %}
|
||||
<entry>
|
||||
<title type="html"><![CDATA[{{ post.title | cdata_escape }}]]></title>
|
||||
<link href="{{ site.url }}{{ post.url }}"/>
|
||||
<updated>{{ post.date | date_to_xmlschema }}</updated>
|
||||
<id>{{ site.url }}{{ post.id }}</id>
|
||||
<content type="html"><![CDATA[{{ post.content | expand_urls: site.url | markdownify | cdata_escape }}]]></content>
|
||||
</entry>
|
||||
{% endfor %}
|
||||
</feed>
|
@ -48,6 +48,35 @@ module Jekyll
|
||||
|
||||
end
|
||||
|
||||
# The CategoryFeed class creates an Atom feed for the specified category.
|
||||
class CategoryFeed < Page
|
||||
|
||||
# Initializes a new CategoryFeed.
|
||||
#
|
||||
# +base+ is the String path to the <source>.
|
||||
# +category_dir+ is the String path between <source> and the category folder.
|
||||
# +category+ is the category currently being processed.
|
||||
def initialize(site, base, category_dir, category)
|
||||
@site = site
|
||||
@base = base
|
||||
@dir = category_dir
|
||||
@name = 'atom.xml'
|
||||
self.process(@name)
|
||||
# Read the YAML data from the layout page.
|
||||
self.read_yaml(File.join(base, '_includes/custom'), 'category_feed.xml')
|
||||
self.data['category'] = category
|
||||
# Set the title for this page.
|
||||
title_prefix = site.config['category_title_prefix'] || 'Category: '
|
||||
self.data['title'] = "#{title_prefix}#{category}"
|
||||
# Set the meta-description for this page.
|
||||
meta_description_prefix = site.config['category_meta_description_prefix'] || 'Category: '
|
||||
self.data['description'] = "#{meta_description_prefix}#{category}"
|
||||
|
||||
# Set the correct feed URL.
|
||||
self.data['feed_url'] = "#{category_dir}/#{name}"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
# The Site class is a built-in Jekyll class with access to global site config information.
|
||||
class Site
|
||||
@ -63,6 +92,13 @@ module Jekyll
|
||||
index.write(self.dest)
|
||||
# Record the fact that this page has been added, otherwise Site::cleanup will remove it.
|
||||
self.pages << index
|
||||
|
||||
# Create an Atom-feed for each index.
|
||||
feed = CategoryFeed.new(self, self.source, category_dir, category)
|
||||
feed.render(self.layouts, site_payload)
|
||||
feed.write(self.dest)
|
||||
# Record the fact that this page has been added, otherwise Site::cleanup will remove it.
|
||||
self.pages << feed
|
||||
end
|
||||
|
||||
# Loops through the list of category pages and processes each one.
|
||||
|
Loading…
Reference in New Issue
Block a user