Generators

Generators are used to fabricate new virtual sources based on an existing concrete source.

A good example of this would be tags or categories for posts. One would not want to create a tag or category index page for every tag that may ever be created. A generator can be used to create a tag or category index page dynamically based on meta data from posts.

Another example would be pagination. If a list of posts needs to be paginated, one would not want to create an index page for page 1 and page 2 and page 3. One would prefer to have those pages generated automatically.

Sculpin ships with a Pagination generator.


Pagination

The pagination generator allows you to create multiple pages around a set of items. This is particularly useful if you want to create pages for a list of collection of sources like you can get from a data provider.

Kernel Configuration

  • sculpin_pagination.max_per_page: The default maximum number of items to show per page. This value can be overridden on a source-by-source basis. Default value is 10.

Source Level Meta Configuration

  • pagination.max_per_page: The maximum number of items to show per page. Default value is set by the sculpin_pagination.max_per_page kernel configuration.

  • pagination.provider: The descriptor for the provider of the items to be paginated. The default value is page.posts.

    • page.{key}: Reference page meta data. This will allow a source to define its own simple collection of data that may be paginated.

    • data.{key}: Reference data provider data. The page must use the provider.

Usage

---
generator: pagination
pagination:
    max_per_page: 3
use:
    - posts
---
<ul>
    {% for item in page.pagination.items %}
        <li><a href="{{ item.url }}">{{ item.title }}</a></li>
    {% endfor %}
</ul>

<nav>
{% if page.pagination.previous_page or page.pagination.next_page %}
    {% if page.pagination.previous_page %}
        <a href="{{ site.url }}{{ page.pagination.previous_page.url }}">Newer Items</a>
    {% endif %}
    {% if page.pagination.next_page %}
        <a href="{{ site.url }}{{ page.pagination.next_page.url }}">Older Items</a>
    {% endif %}
{% endif %}
</nav>