Add pagination support for home page, sections and taxonomies

Two new configuration properties, `Paginate` (default `0`) and `PaginatePath` (default `page`) are added.

Setting `paginate` to a positive value will split the list pages for the home page, sections and taxonomies into chunks of size of the `paginate` property.

A `.Paginator` is provided to help building a pager menu.

There are two ways to configure a `.Paginator`:

1. The simplest way is just to call `.Paginator.Pages` from a template. It will contain the pages for "that page" (`.Data.Pages` will (like today) contain all the pages).
2. Select a sub-set of the pages with the available template functions and pass the slice to `.Paginate` : `{{ range (.Paginate (where .Data.Pages "Type" "post")).Pages }}`

**NOTE:** For a given Node, it's one of the options above. It's perfectly legitimate to iterate over the same pager more than once, but it's static and cannot change.

The `.Paginator` contains enough information to build a full-blown paginator interface.

The pages are built on the form (note: BLANK means no value, i.e. home page):

```
[SECTION/TAXONOMY/BLANK]/index.html
[SECTION/TAXONOMY/BLANK]/page/1/index.html => redirect to  [SECTION/TAXONOMY/BLANK]/index.html
[SECTION/TAXONOMY/BLANK]/page/2/index.html
....
```

Fixes #96
This commit is contained in:
bep
2014-12-27 14:11:19 +01:00
parent 407e80a9ab
commit 37445bc6aa
7 changed files with 554 additions and 59 deletions

View File

@@ -16,6 +16,7 @@ package helpers
import (
"fmt"
"github.com/PuerkitoBio/purell"
"github.com/spf13/viper"
"net/url"
"path"
"strings"
@@ -97,6 +98,10 @@ func AddContextRoot(baseUrl, relativePath string) string {
return newPath
}
func UrlizeAndPrep(in string) string {
return UrlPrep(viper.GetBool("UglyUrls"), Urlize(in))
}
func UrlPrep(ugly bool, in string) string {
if ugly {
x := Uglify(SanitizeUrl(in))