Add virtual Atom and JSON feeds. Example for https://github.com/11ty/eleventy-plugin-rss/issues/47
This commit is contained in:
parent
855f27468e
commit
6b5d6bba1c
1
content/feed/.virtual
Normal file
1
content/feed/.virtual
Normal file
@ -0,0 +1 @@
|
||||
For RSS feed, Atom Feed, and JSON feed templates, see the plugin in eleventy.config.js
|
@ -1,31 +0,0 @@
|
||||
---
|
||||
# Metadata comes from _data/metadata.js
|
||||
permalink: /feed/feed.xml
|
||||
eleventyNavigation:
|
||||
key: Feed
|
||||
order: 3
|
||||
---
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml-stylesheet href="/feed/pretty-atom-feed.xsl" type="text/xsl"?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="{{ metadata.language }}">
|
||||
<title>{{ metadata.title }}</title>
|
||||
<subtitle>{{ metadata.description }}</subtitle>
|
||||
<link href="{{ permalink | htmlBaseUrl(metadata.url) }}" rel="self"/>
|
||||
<link href="{{ metadata.url | addPathPrefixToFullUrl }}"/>
|
||||
<updated>{{ collections.posts | getNewestCollectionItemDate | dateToRfc3339 }}</updated>
|
||||
<id>{{ metadata.url }}</id>
|
||||
<author>
|
||||
<name>{{ metadata.author.name }}</name>
|
||||
<email>{{ metadata.author.email }}</email>
|
||||
</author>
|
||||
{%- for post in collections.posts | reverse %}
|
||||
{%- set absolutePostUrl %}{{ post.url | htmlBaseUrl(metadata.url) }}{% endset %}
|
||||
<entry>
|
||||
<title>{{ post.data.title }}</title>
|
||||
<link href="{{ absolutePostUrl }}"/>
|
||||
<updated>{{ post.date | dateToRfc3339 }}</updated>
|
||||
<id>{{ absolutePostUrl }}</id>
|
||||
<content type="html">{{ post.templateContent | transformWithHtmlBase(absolutePostUrl, post.url) }}</content>
|
||||
</entry>
|
||||
{%- endfor %}
|
||||
</feed>
|
@ -1,3 +0,0 @@
|
||||
export default {
|
||||
layout: false,
|
||||
};
|
@ -1,29 +0,0 @@
|
||||
---
|
||||
# Metadata comes from _data/metadata.js
|
||||
permalink: /feed/feed.json
|
||||
---
|
||||
{
|
||||
"version": "https://jsonfeed.org/version/1.1",
|
||||
"title": "{{ metadata.title }}",
|
||||
"language": "{{ metadata.language }}",
|
||||
"home_page_url": "{{ metadata.url | addPathPrefixToFullUrl }}",
|
||||
"feed_url": "{{ permalink | htmlBaseUrl(metadata.url) }}",
|
||||
"description": "{{ metadata.description }}",
|
||||
"author": {
|
||||
"name": "{{ metadata.author.name }}",
|
||||
"url": "{{ metadata.author.url }}"
|
||||
},
|
||||
"items": [
|
||||
{%- for post in collections.posts | reverse %}
|
||||
{%- set absolutePostUrl = post.url | htmlBaseUrl(metadata.url) %}
|
||||
{
|
||||
"id": "{{ absolutePostUrl }}",
|
||||
"url": "{{ absolutePostUrl }}",
|
||||
"title": "{{ post.data.title }}",
|
||||
"content_html": {% if post.templateContent %}{{ post.templateContent | transformWithHtmlBase(absolutePostUrl, post.url) | dump | safe }}{% else %}""{% endif %},
|
||||
"date_published": "{{ post.date | dateToRfc3339 }}"
|
||||
}
|
||||
{% if not loop.last %},{% endif %}
|
||||
{%- endfor %}
|
||||
]
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
import markdownItAnchor from "markdown-it-anchor";
|
||||
|
||||
import { InputPathToUrlTransformPlugin, HtmlBasePlugin } from "@11ty/eleventy";
|
||||
import pluginRss from "@11ty/eleventy-plugin-rss";
|
||||
import { feedPlugin } from "@11ty/eleventy-plugin-rss";
|
||||
import pluginSyntaxHighlight from "@11ty/eleventy-plugin-syntaxhighlight";
|
||||
import pluginNavigation from "@11ty/eleventy-navigation";
|
||||
import { eleventyImageTransformPlugin } from "@11ty/eleventy-img";
|
||||
@ -32,7 +32,37 @@ export default async function(eleventyConfig) {
|
||||
// eleventyConfig.addBundle("js");
|
||||
|
||||
// Official plugins
|
||||
eleventyConfig.addPlugin(pluginRss);
|
||||
eleventyConfig.addPlugin(feedPlugin, {
|
||||
files: {
|
||||
json: "/feed/feed.json",
|
||||
atom: "/feed/feed.xml",
|
||||
// "rss": "/feed/rss.xml",
|
||||
},
|
||||
stylesheet: {
|
||||
atom: "pretty-atom-feed.xsl",
|
||||
},
|
||||
templateData: {
|
||||
atom: {
|
||||
eleventyNavigation: {
|
||||
key: "Feed",
|
||||
order: 3
|
||||
}
|
||||
}
|
||||
},
|
||||
collectionName: "posts",
|
||||
limit: 10,
|
||||
metadata: {
|
||||
language: "en",
|
||||
title: "Blog Title",
|
||||
subtitle: "This is a longer description about your blog.",
|
||||
base: "https://example.com/",
|
||||
author: {
|
||||
name: "Your Name",
|
||||
email: "me@example.com"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
eleventyConfig.addPlugin(pluginSyntaxHighlight, {
|
||||
preAttributes: { tabindex: 0 }
|
||||
});
|
||||
@ -44,9 +74,12 @@ export default async function(eleventyConfig) {
|
||||
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
|
||||
// File extensions to process in _site folder
|
||||
extensions: "html",
|
||||
|
||||
// Output formats for each image.
|
||||
formats: ["avif", "webp", "auto"],
|
||||
|
||||
// widths: ["auto"],
|
||||
|
||||
defaultAttributes: {
|
||||
// e.g. <img loading decoding> assigned on the HTML tag will override these values.
|
||||
loading: "lazy",
|
||||
@ -92,6 +125,7 @@ export const config = {
|
||||
"njk",
|
||||
"html",
|
||||
"liquid",
|
||||
"11ty.js",
|
||||
],
|
||||
|
||||
// Pre-process *.md files with: (default: `liquid`)
|
||||
|
@ -37,7 +37,7 @@
|
||||
"@11ty/eleventy": "3.0.0-alpha.10",
|
||||
"@11ty/eleventy-img": "5.0.0-beta.1",
|
||||
"@11ty/eleventy-navigation": "^0.3.5",
|
||||
"@11ty/eleventy-plugin-rss": "^1.2.0",
|
||||
"@11ty/eleventy-plugin-rss": "^2.0.0-beta.5",
|
||||
"@11ty/eleventy-plugin-syntaxhighlight": "^5.0.0",
|
||||
"luxon": "^3.4.4",
|
||||
"markdown-it-anchor": "^8.6.7",
|
||||
|
Loading…
Reference in New Issue
Block a user