Mercurial > piecrust2
view docs/docs/04_content-model/05_default-model.md @ 1057:fd95fef51705
docs: Update documentation on sources and pipelines.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 01 Feb 2018 22:03:33 -0800 |
parents | d8d2b504306a |
children |
line wrap: on
line source
--- title: Default Content Model --- The default content model that you get with PieCrust out of the box is a generic "blog engine" model. It can be configured, to a degree, using some simple website configuration settings that operate at a higher level about the content model. Understanding how this all work can be useful to understand how the PieCrust content model can be tweaked to one's liking. ## Sources The default sources define what you would expect for a personal website: "free-form" pages (`pages`), blog posts (`posts`), taxonomies (`tags` and `categories`), and yearly archives. ### Pages First, the pages: sources: pages: data_endpoint: site.pages item_name: page Here's a breakdown of those settings: * The `pages` source is anchored at the default location, which is a sub-directory with the same name as the source (`/pages`). * It's using the default source backend (named `default`) which just returns any file inside its sub-directory as a page. * It exposes all those pages as a simple iterator (the default) at `site.pages`. * It defines the `item_name` so that you can prepare a new page with `chef prepare page`. ### Blog posts The `posts` sources is a bit more complicated: sources: posts: type: posts/flat fs_endpoint: posts data_endpoint: blog data_type: blog default_layout: post item_name: post Here's what this does: * The `posts` source is also anchored at the default location (`/posts`). But if the `site/blogs` setting lists more blogs, each blog will be listed under `/posts/<blogname>`, effectively changing the `fs_endpoint` setting. * It's using the `posts/flat` backend, which means blog posts should be named with the date at the beginning of the filename. The `site/posts_fs` changes this to `posts/<fsname>`. * All blog posts are exposed through the `blog` data endpoint, with a `blog` data provider -- which means you can also access blog archives in addition to a flat list of all blog posts. If the `site/blogs` setting lists more blogs, each blog will have its `data_endpoint` set to its name. * The default layout to use for all blog posts is set to `post` instead of `default`. ### Taxonomies The default content model defines 2 taxonomies: "categories" and "tags". Categories are meant to be exclusive, _i.e._ a blog post can only have one category. Tags are meant to be used more freely, where a blog post can be tagged with multiple terms. This shows up more or less like this in the website configuration: site: taxonomies: categories: term: category func_name: pccaturl tags: multiple: true term: tag PieCrust then creates a `taxonomy` source for each defined taxonomy (including custom taxonomies you added or changed in `sites/taxonomies`). Each taxonomy source will look like this: site: sources: posts_TAXONOMY: type: taxonomy taxonomy: TAXONOMY source: posts template: _TERM.html In this example, `TAXONOMY` is the name of the taxonomy (_e.g._: `tags`), and `TERM` is the `term` value (_e.g._: `tag`). If no `term` is defined, the name of the taxonomy is used. As you can see, the taxonomy index layout templates are set to `_category.html` and `_tag.html` respectively. ### Archives The blog archives source is defined like this by default: site: sources: posts_archives: type: blog_archives source: posts template: _year.html The index layout template for each year of archives is set to `_year.html`. ## Routes The default content model defines routes for the site's pages and blog posts roughly like such: - url: /%path:slug% source: pages func: pcurl - url: /%year%/%month%/%day%/%slug% source: posts func: pcposturl - url: /archives/%year% source: posts_archives func: pcyearurl - url: /tag/%tag% source: posts_tags func: pctagurl - url: /category/%category% source: posts_categories func: pccaturl - url: /%path:slug% source: theme_pages func: pcurl Let's go through it: * The `pages` source is exposed in the most simple way: just a single route, rooted to `/`. Whatever `slug` gets returned for a page (which is pretty much the relative path of the page's file) will be its URL. * Blog posts (from the `posts` source) are exposed with a `/year/month/day/slug` URL, which matches the type of routing metadata the `posts/*` sources offer. If the `post_url` is set, the route will be changed accordingly. If there's more than one blog in `site/blogs`, there will be more than one route for posts, and the route will be rooted with `/<blogname>`. * The next route is for the blog archives source. * There are then routes for the taxonomy sources. By default, there are 2 taxonomies (tags and categories) so that's 2 routes. * All routes define some URL functions for use in your pages and templates (`pcurl` for pages, `pcposturl` for posts, etc.). Note that by default the `categories` taxonomy would have a `pccategoryurl` route function, which is a bit too long to type, so by default that taxonomy specifies a `func_name` to override that to `pccaturl`. * The last route is meant to match any page defined in the theme. It happens last so that a page with the same relative path in your website will properly override it.