First attempt at creating per-category Atom feeds.
This commit is contained in:
parent
8c2532e5bf
commit
66916f57a7
28
.themes/classic/source/_includes/custom/category_feed.xml
Normal file
28
.themes/classic/source/_includes/custom/category_feed.xml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
layout: nil
|
||||||
|
---
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
|
|
||||||
|
<title>{{ page.title | xml_escape }} | {{ site.title | xml_escape }}</title>
|
||||||
|
<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
|
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.
|
# The Site class is a built-in Jekyll class with access to global site config information.
|
||||||
class Site
|
class Site
|
||||||
@ -63,6 +92,13 @@ module Jekyll
|
|||||||
index.write(self.dest)
|
index.write(self.dest)
|
||||||
# Record the fact that this page has been added, otherwise Site::cleanup will remove it.
|
# Record the fact that this page has been added, otherwise Site::cleanup will remove it.
|
||||||
self.pages << index
|
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
|
end
|
||||||
|
|
||||||
# Loops through the list of category pages and processes each one.
|
# Loops through the list of category pages and processes each one.
|
||||||
|
Loading…
Reference in New Issue
Block a user