Improve collections docs

See https://github.com/jekyll/jekyll/pull/5630 for more details on the update. 

@jekyll/documentation
@DirtyF
This commit is contained in:
Tom Johnson 2016-12-25 20:34:20 -08:00 committed by GitHub
parent 52c2645abb
commit f5eb869e58
1 changed files with 106 additions and 22 deletions

View File

@ -7,12 +7,18 @@ permalink: /docs/collections/
Not everything is a post or a page. Maybe you want to document the various Not everything is a post or a page. Maybe you want to document the various
methods in your open source project, members of a team, or talks at a methods in your open source project, members of a team, or talks at a
conference. Collections allow you to define a new type of document that behave conference. Collections allow you to define a new type of document that behave
like Pages or Posts do normally, but also have their own unique properties and like Pages or Posts do normally but which also have their own unique properties and
namespace. namespace.
## Using Collections ## Using Collections
### Step 1: Tell Jekyll to read in your collection To start using collections, follow these 3 steps:
* [Step 1: Tell Jekyll to read in your collection](#step1)
* [Step 2: Add your content](#step2)
* [Step 3: Optionally render your collection's documents into independent files](#step3)
### Step 1: Tell Jekyll to read in your collection {#step1}
Add the following to your site's `_config.yml` file, replacing `my_collection` Add the following to your site's `_config.yml` file, replacing `my_collection`
with the name of your collection: with the name of your collection:
@ -41,11 +47,11 @@ defaults:
layout: page layout: page
``` ```
### Step 2: Add your content ### Step 2: Add your content {#step2}
Create a corresponding folder (e.g. `<source>/_my_collection`) and add Create a corresponding folder (for example, `<source>/_my_collection`) and add
documents. YAML Front Matter is read in as data if it exists, and everything documents. YAML Front Matter is read in as data if it exists, and everything
after it is stuck in the Document's `content` attribute. If no YAML Front after it is available in the document's `content` attribute. If no YAML Front
Matter is provided, Jekyll will not generate the file in your collection. Matter is provided, Jekyll will not generate the file in your collection.
<div class="note info"> <div class="note info">
@ -56,7 +62,7 @@ your <code>_config.yml</code> file, with the addition of the preceding <code>_</
</p> </p>
</div> </div>
### Step 3: Optionally render your collection's documents into independent files ### Step 3: Optionally render your collection's documents into independent files {#step3}
If you'd like Jekyll to create a public-facing, rendered version of each If you'd like Jekyll to create a public-facing, rendered version of each
document in your collection, set the `output` key to `true` in your collection document in your collection, set the `output` key to `true` in your collection
@ -73,19 +79,6 @@ For example, if you have `_my_collection/some_subdir/some_doc.md`,
it will be rendered using Liquid and the Markdown converter of your it will be rendered using Liquid and the Markdown converter of your
choice and written out to `<dest>/my_collection/some_subdir/some_doc.html`. choice and written out to `<dest>/my_collection/some_subdir/some_doc.html`.
As for posts with [Permalinks](../permalinks/), the document
URL can be customized by setting `permalink` metadata for the collection:
```yaml
collections:
my_collection:
output: true
permalink: /awesome/:path/
```
For example, if you have `_my_collection/some_subdir/some_doc.md`, it will be
written out to `<dest>/awesome/some_subdir/some_doc/index.html`.
<div class="note info"> <div class="note info">
<h5>Don't forget to add YAML for processing</h5> <h5>Don't forget to add YAML for processing</h5>
<p> <p>
@ -95,6 +88,21 @@ written out to `<dest>/awesome/some_subdir/some_doc/index.html`.
</p> </p>
</div> </div>
## Configuring permalinks for collections {#permalinks}
You can customize the [Permalinks](../permalinks/) for your collection's documents by setting `permalink` property in the collection's configuration as follows:
```yaml
collections:
my_collection:
output: true
permalink: /awesome/:path/:title.output_ext
```
In this example, the collection documents will the have the URL of `awesome` followed by the path to the document and its file extension.
Collections have the following template variables available for permalinks:
<div class="mobile-side-scroller"> <div class="mobile-side-scroller">
<table> <table>
<thead> <thead>
@ -149,14 +157,90 @@ written out to `<dest>/awesome/some_subdir/some_doc/index.html`.
</table> </table>
</div> </div>
## Permalink examples for collections
Depending on how you declare the permalinks in your configuration file, the permalinks and paths get written differently in the `_site` folder. A few examples will help clarify the options.
Let's say your collection is called `apidocs` with `doc1.md` in your collection. `doc1.md` is grouped inside a folder called `mydocs`. Your project's source directory for the collection looks this:
```
├── \_apidocs
│   └── mydocs
│   └── doc1.md
```
Based on this scenario, here are a few permalink options.
**Permalink configuration 1**: [Nothing configured] <br/>
**Output**:
```
├── apidocs
│   └── mydocs
│   └── doc1.html
```
**Permalink configuration 2**: `/:collection/:path/:title:output_ext` <br/>
**Output**:
```
├── apidocs
│   └── mydocs
│   └── doc1.html
```
**Permalink configuration 3**: No collection permalinks configured, but `pretty` configured for pages/posts. <br/>
**Output**:
```
├── apidocs
│   └── mydocs
│   └── doc1
│   └── index.html
```
**Permalink configuration 4**: `/awesome/:path/:title.html` <br/>
**Output**:
```
├── awesome
│   └── mydocs
│   └── doc1.html
```
**Permalink configuration 5**: `/awesome/:path/:title/` <br/>
**Output**:
```
├── awesome
│   └── mydocs
│   └── doc1
│   └── index.html
```
**Permalink configuration 6**: `/awesome/:title.html` <br/>
**Output**:
```
├── awesome
│   └── doc1.html
```
**Permalink configuration 7**: `:title.html`
**Output**:
```
├── doc1.html
```
## Liquid Attributes ## Liquid Attributes
### Collections ### Collections
Each collection is accessible via the `site` Liquid variable. For example, if Each collection is accessible through the `site` variable. For example, if
you want to access the `albums` collection found in `_albums`, you'd use you want to access the `albums` collection found in `_albums`, you'd use
`site.albums`. Each collection is itself an array of documents `site.albums`. Each collection is itself an array of documents
(e.g. `site.albums` is an array of documents, much like `site.pages` and (for example, `site.albums` is an array of documents, much like `site.pages` and
`site.posts`). See below for how to access attributes of those documents. `site.posts`). See below for how to access attributes of those documents.
The collections are also available under `site.collections`, with the metadata The collections are also available under `site.collections`, with the metadata
@ -335,7 +419,7 @@ file, each document has the following attributes:
Attributes from the YAML front matter can be accessed as data anywhere in the Attributes from the YAML front matter can be accessed as data anywhere in the
site. Using the above example for configuring a collection as `site.albums`, site. Using the above example for configuring a collection as `site.albums`,
one might have front matter in an individual file structured as follows (which you might have front matter in an individual file structured as follows (which
must use a supported markup format, and cannot be saved with a `.yaml` must use a supported markup format, and cannot be saved with a `.yaml`
extension): extension):