Adding blog functionality to a static Eleventy (11ty) website
In a previous tutorial we covered setting up a simple site with Eleventy. This article will show you how to add blog functionality (display a list of posts in reverse chronological order).
Let’s get started by creating a project folder and installing Eleventy if you haven’t already done so by running the following commands:
mkdir eleventy-blog cd eleventy-blog npm init -y npm install --save-dev @11ty/eleventyCode language:
plaintext
(
plaintext
)
Next we’ll setup the default layout file by creating an _includes folder with a default-layout.njk file:
--- title: Eleventy Blog ---<
html
lang
="en"
><
head
><
meta
charset
="utf-8"
><
meta
name
="viewport"
content
="width=device-width, initial-scale=1.0"
><
title
>{{ title }}</
title
></
head
><
body
> {{ content | safe }}</
body
></
html
>Code language:
HTML, XML
(
xml
)
Each of the blog posts will be saved as a individual markdown file in a folder called blog.
Here is an example of a blog post markdown file for reference saved as /blog/hello-world.md:
--- layout:default
-layout.njk tags: ['blog'
] title: Hello World date:2020
-01
-01
teaser: This is the first blog post titled"Hello World"
! --- This is the first blog post!Code language:
PHP
(
php
)
layout:– Specifies the layout file to be used.tags:– Creates a content collection with all other files that also contain ablogtag.title:– Displayed in the list of blog posts we’ll create next and in the<title>tag.date:– Will be used to sort the blogs posts from newest to oldest.teaser:– Optional short teaser text that will be displayed underneath the title in the blog feed.
Blog posts can also be created in HTML markup instead of markdown if you prefer /blog/hello-world.html:
Hello World
--- layout:default
-layout.njktags
: ['blog'
]title
: Hello Worlddate
:2020
-01
-01
teaser
: This is the first blog post titled"Hello World"
! ---<
h1
></
h1
><
p
>This is the first blog post!</
p
>.Code language:
JavaScript
(
javascript
)
Now we can create a index.njk file that will load our collection of blog posts:
{%- for post in collections.blog | reverse -%}
--- layout:default
-layout.njkpagination
: data: collections.blogsize
:10
alias
: blog ---<
ul
><
li
><
h3
><
a
href
="{{ post.url | url }}"
>{{ post.data.title }}</
a
> | {{ post.date }}</
h3
> {% if post.data.teaser %}<
p
>{{ post.data.teaser }}</
p
> {% endif %}</
li
> {%- endfor -%}</
ul
>Code language:
JavaScript
(
javascript
)
data:– Get’s all posts in the blog collection (tags: ['blog']).size:– Limits the number of blog posts displayed to 10.alias:– Used to construct the URL for individual blog posts e.g:/blog/hello-world/.
We can now run Eleventy and check that everything is working as expected:
npx
@11ty
/eleventy --serveCode language:
CSS
(
css
)
In the browser you should see a list of the blog posts you created:

You’ll notice the date isn’t formatted in a way that is particularly easy to read.
To format the date in a more readable format we’ll install the eleventy-plugin-date plugin:
npm install --save-dev eleventy-plugin-date
We then need to load the plugin in the config file .eleventy.js (create in root folder if you haven’t already):
{ eleventyConfig.addPlugin(pluginDate); };
const
pluginDate =require
("eleventy-plugin-date"
);module
.exports =function
(eleventyConfig
)Code language:
JavaScript
(
javascript
)
Then change the date output in index.njk as follows and it will be displayed in a more readable format:
{{ post.date | readableDate }}


















![Toni Kroos là ai? [ sự thật về tiểu sử đầy đủ Toni Kroos ]](https://evbn.org/wp-content/uploads/New-Project-6635-1671934592.jpg)


