Add sort and grouping functions for publish date and param of Page

`GroupBy` is modified to allow it to receive a method name argument for
example `Type` as its first argument. It is only allowed to call with
a method which takes no arguments and returns a result or a pair of
a result and an error.

The functions discussed at #443 are also added

- `ByPublishDate`: Order contents by `PublishDate` front matter variable
- `GroupByPublishDate(format, order)`: Group contents by `PublishDate`
  front matter variable formatted in string like `GroupByDate`
- `GroupByParam(key, order)`: Group contents by `Param` front matter
  variable specified by `key` argument
- `GroupByParamDate(key, format, order)`: Group contents by `Param`
  front matter variable specified by `key` argument and formatted in
  string like `GroupByDate`. It's effective against `time.Time` type
  front matter variable
This commit is contained in:
Tatsushi Demachi 2014-10-18 00:10:19 +09:00 committed by spf13
parent 3f94f6cb58
commit 00dfcc6477

View File

@ -178,6 +178,15 @@ your list templates:
</li> </li>
{{ end }} {{ end }}
### Order by PublishDate
{{ range .Data.Pages.ByPublishDate }}
<li>
<a href="{{ .Permalink }}">{{ .Title }}</a>
<div class="meta">{{ .PublishDate.Format "Mon, Jan 2, 2006" }}</div>
</li>
{{ end }}
### Order by Length ### Order by Length
{{ range .Data.Pages.ByLength }} {{ range .Data.Pages.ByLength }}
@ -219,7 +228,7 @@ Can be applied to any of the above. Using Date for an example.
## Grouping Content ## Grouping Content
Hugo provides some grouping functions for list pages. You can use them to Hugo provides some grouping functions for list pages. You can use them to
group pages by Section, Date etc. group pages by Section, Type, Date etc.
Here are a variety of different ways you can group the content items in Here are a variety of different ways you can group the content items in
your list templates: your list templates:
@ -252,6 +261,48 @@ your list templates:
</ul> </ul>
{{ end }} {{ end }}
### Grouping by Page publish date
{{ range .Data.Pages.GroupByPublishDate "2006-01" }}
<h3>{{ .Key }}</h3>
<ul>
{{ range .Pages }}
<li>
<a href="{{ .Permalink }}">{{ .Title }}</a>
<div class="meta">{{ .PublishDate.Format "Mon, Jan 2, 2006" }}</div>
</li>
{{ end }}
</ul>
{{ end }}
### Grouping by Page param
{{ range .Data.Pages.GroupByParam "param_key" }}
<h3>{{ .Key }}</h3>
<ul>
{{ range .Pages }}
<li>
<a href="{{ .Permalink }}">{{ .Title }}</a>
<div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
</li>
{{ end }}
</ul>
{{ end }}
### Grouping by Page param in date format
{{ range .Data.Pages.GroupByParamDate "param_key" "2006-01" }}
<h3>{{ .Key }}</h3>
<ul>
{{ range .Pages }}
<li>
<a href="{{ .Permalink }}">{{ .Title }}</a>
<div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
</li>
{{ end }}
</ul>
{{ end }}
### Reversing Key Order ### Reversing Key Order
The ordering of the groups is performed by keys in alpha-numeric order (AZ, The ordering of the groups is performed by keys in alpha-numeric order (AZ,