Коллекции

Переменные и вспомогательные функции

Каждая коллекция может иметь свой собственный набор переменных и вспомогательных методов, определенных в массиве коллекции в config.php. Они имеют тот же формат, что и переменные и вспомогательные методы для всего сайта, которые определены на верхнем уровне массива config.php.

Переменные

Как и в случае с общесайтовыми переменными, переменные коллекции, определенные в config.php, могут действовать как значения по умолчанию, которые могут быть переопределены переменными с тем же именем, указанными в начальной части YAML элемента коллекции. Фактически, переменные верхнего уровня в config.php будут переопределены одноименными переменными в массиве коллекции, которые в дальнейшем будут переопределены ссылками в заголовке YAML любой отдельной страницы, что позволит Вам настроить каскад значений переменных по умолчанию. Например:

config.php

<?php

return [
    'author' => 'Автор сайта по умолчанию',
    'collections' => [
        'posts' => [
            'author' => 'Автор блога по умолчанию',
        ],
    ],
];

__posts/blog-post-1.blade.php_

---
extends: _layouts.post
title: Мой первый пост
author: Кейт Дамиани
---
@section ('content')

<h1>{{ $page->title }}</h1>
<p>By {{ $page->author }}</p>

@endsection

Автором этого элемента коллекции будет Кейт Дамиани, значение из заголовка YAML.


__posts/blog-post-2.blade.php_

---
extends: _layouts.post
title: Мой второй пост
---
@section ('content')

<h1>{{ $page->title }}</h1>
<p>By {{ $page->author }}</p>

@endsection

Для этого элемента коллекции автором будет Автор блога по умолчанию, значение из массива posts в config.php.


about-us.blade.php

---
extends: _layouts.about
title: О нашей компании
---
@section ('content')

<h1>{{ $page->title }}</h1>
<p>By {{ $page->author }}</p>

@endsection

Для этой обычной страницы (не являющейся коллекцией) автором будет Автор сайта по умолчанию, значение из верхнего уровня config.php.

Вспомогательные функции

Вспомогательные функции могут быть включены в массив настроек коллекции в config.php и будут доступны для всех элементов этой коллекции. Те же правила каскадирования, которые применяются к переменным, также применимы к функциям, то есть функции, определенные для коллекции, переопределят функцию с тем же именем, определенную на верхнем уровне. Например:

config.php

<?php

return [
    'excerpt' => function ($page, $characters = 100) {
        return substr($page->getContent(), 0, $characters);
    },
    'collections' => [
        'posts' => [
            'excerpt' => function ($page, $characters = 50) {
                return substr(strip_tags($page->getContent()), 0, $characters);
            },
        ],
    ],
];