PageManager
PageManager получает страницы и их языковые варианты независимо от страницы текущего HTTP-запроса.Поддерживает
- получение страницы по URL и языку
- получение списка опубликованных страниц
- получение страниц по идентификаторам
- использование текущего языка CMS
- проверку поддержки свободной ссылки
- получение переводов страницы
- получение языковых вариантов главной страницы
- работу с основной или переданной базой данных
Быстрый старт
$pageManager = new PageManager();
$page = $pageManager->getPublishedByUrl('contacts');
if ($page === null) {
return;
}
$title = $page['title'];
$content = $page['content'];Получение страницы
getPublishedByUrl(string $url, bool $freeLink = false, ?string $language = null): ?array
Возвращает опубликованную страницу по её URL и языку:
$page = (new PageManager())->getPublishedByUrl('contacts');Начальные и конечные символы / удаляются:
$page = (new PageManager())->getPublishedByUrl('/contacts/');Для получения страницы определённого языка передайте его код третьим параметром:
$page = (new PageManager())->getPublishedByUrl('contacts', false, 'en');Если язык не передан, используется текущий язык CMS. Если текущий язык недоступен, используется язык сайта по умолчанию.
| Параметр | Тип | Описание |
|---|---|---|
$url |
string |
URL страницы без языкового префикса. |
$freeLink |
bool |
Требовать непустое значение free_link. |
$language |
string|null |
Код языка страницы. |
Если URL пустой или подходящая страница не найдена, метод возвращает null.
Если у страницы есть метаполя, meta содержит их значения по ключам, а meta_values — определения полей. Если метаполей нет, эти ключи могут отсутствовать.
Свободная ссылка
Чтобы получить только страницу со свободной ссылкой, передайте true вторым параметром:
$page = (new PageManager())->getPublishedByUrl('developer', true);Поиск также учитывает выбранный язык.
Список опубликованных страниц
getPublishedList(string $orderBy = 'id', string $order = 'DESC', ?int $limit = null, int $offset = 0, array $columns = ..., ?string $language = null, bool $allLanguages = false): array
Возвращает опубликованные страницы выбранного языка. Если язык не указан, используется текущий язык CMS.
$pages = (new PageManager())->getPublishedList(orderBy: 'date', limit: 10);
foreach ($pages as $page) {
echo $page['title'];
}По умолчанию результат содержит id, title, url, img, author, date и modified_date. Другой набор полей можно передать через $columns. Поля meta и seo запрашиваются только при явном выборе.
Сортировать можно по id, title, date и modified_date; направление — ASC или DESC. При одинаковом значении сортировки страницы дополнительно упорядочиваются по id.
$limit должен быть больше нуля. $offset нельзя использовать без $limit, и он не может быть отрицательным.
Чтобы получить страницы всех языков, передайте allLanguages: true. В этом случае результат также содержит поле language, если выбранный набор полей не включает его.
Недопустимые параметры сортировки, ограничения или пустой $columns вызывают InvalidArgumentException. Если подходящих страниц нет, возвращается пустой массив.
Получение страниц по идентификаторам
getByIds(array $ids, array $columns = ['*']): array
Возвращает страницы с указанными идентификаторами:
$pages = (new PageManager())->getByIds([7, 12], ['id', 'title', 'url', 'language']);Результат — список массивов данных страниц, отсортированный по ID по возрастанию. Порядок идентификаторов в $ids не определяет порядок результата.
Принимаются положительные целые числа и строки с корректным целочисленным значением. Повторяющиеся идентификаторы учитываются один раз; некорректные значения и отсутствующие страницы пропускаются.
Метод не фильтрует страницы по статусу публикации или языку. Для списка опубликованных страниц используйте getPublishedList().
По умолчанию запрашиваются все поля. При выборе meta результат содержит значения метаполей в meta и их определения в meta_values; поле seo возвращается массивом.
Если подходящих страниц нет, возвращается пустой массив. Пустой $columns вызывает InvalidArgumentException.
Переводы страницы
getPublishedTranslations(string $translationKey): array
Возвращает опубликованные переводы, объединённые одним значением translation_key:
$pageManager = new PageManager();
$page = $pageManager->getPublishedByUrl('contacts');
$translations = $page === null ? [] : $pageManager->getPublishedTranslations((string) ($page['translation_key'] ?? ''));Каждый элемент содержит:
| Поле | Описание |
|---|---|
id |
Идентификатор страницы. |
url |
URL страницы без языкового префикса. |
language |
Код языка. |
template |
Название шаблона. |
seo |
SEO-настройки в виде массива. |
Если ключ пустой или имеет неверный формат, метод возвращает пустой массив.
Языковые варианты главной страницы
getMainPageVersions(): array
Возвращает сохранённые языковые варианты главной страницы:
$versions = (new PageManager())->getMainPageVersions();Каждый элемент содержит id, language и seo. Поле seo возвращается в виде массива.
База данных
__construct(?Database $db = null)
Без аргументов менеджер использует основной объект базы данных CMS:
$pageManager = new PageManager();При необходимости можно передать другой экземпляр Database:
$pageManager = new PageManager($database);Отличие от PageData
PageManager используется для поиска произвольной страницы и получения её языковых вариантов.
PageData содержит данные страницы или записи, уже определённой CMS для текущего запроса.
Важные замечания
getPublishedByUrl()иgetPublishedTranslations()возвращают только страницы со статусомpublish- пустой URL возвращает
null - отсутствующая страница возвращает
null getPublishedTranslations()иgetMainPageVersions()преобразуют полеseoв массивgetByIds()получает страницы независимо от статуса публикации и языка- для данных текущей страницы используйте
PageData