Skip to content

Collections

It often happens that we need the same set of pages or files in multiple places across our site. Think of blog articles on the blog and on the home page for example. Collections help with not repeating ourselves in such cases and to access commonly used pages or files collections more easily.

Collection setup

A list of pages

/site/collections/articles.php
return function ($site) {
    return $site->find('blog')->children()->listed()->flip();
};

Pages reference ›

A list of users

/site/collections/admins.php
return function ($users) {
    return $users->filterBy('role', 'admin');
};

Users reference ›

A list of images/files

/site/collections/project-covers.php
return function ($site) {
    return $site
        ->find('projects')
        ->children()
        ->images()
        ->template('cover');
};

Files reference ›

How to use collections

Collections can be used in templates and snippets like this:

$kirby->collection("articles");
$kirby->collection("admins");
$kirby->collection("project-covers");

Nested collections

Since 3.1.0

If you have a lot of collections, it might come handy to organize them in subfolders. Kirby can handle this:

/site/collections/articles/latest.php
return function ($site) {
    return $site->find('blog')->children()->listed()->flip();
};
$kirby->collection("articles/latest");

Best practices

  • It's always a good idea to provide a collection that is not too specific yet.
  • In general, it's better not to apply pagination to collections for example, or to set a limit. You might want to use the same set of pages in different places, but in one template you need three and in the next you need 10.