PageManager


PageManager получает опубликованные страницы независимо от страницы текущего HTTP-запроса.

Поддерживает

  • получение страницы по URL и языку
  • получение списка опубликованных страниц
  • использование текущего языка CMS
  • проверку поддержки свободной ссылки
  • получение переводов страницы
  • получение языковых вариантов главной страницы
  • работу с основной или переданной базой данных

Быстрый старт

php
$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 и языку:

php
$page = (new PageManager())->getPublishedByUrl('contacts');

Начальные и конечные символы / удаляются:

php
$page = (new PageManager())->getPublishedByUrl('/contacts/');

Для получения страницы определённого языка передайте его код третьим параметром:

php
$page = (new PageManager())->getPublishedByUrl('contacts', false, 'en');

Если язык не передан, используется текущий язык CMS. Если текущий язык недоступен, используется язык сайта по умолчанию.

Параметр Тип Описание
$url string URL страницы без языкового префикса.
$freeLink bool Требовать непустое значение free_link.
$language string|null Код языка страницы.

Если URL пустой или подходящая страница не найдена, метод возвращает null.

Если у страницы есть метаполя, meta содержит их значения по ключам, а meta_values — определения полей. Если метаполей нет, эти ключи могут отсутствовать.

Свободная ссылка

Чтобы получить только страницу со свободной ссылкой, передайте true вторым параметром:

php
$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.

php
$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. Если подходящих страниц нет, возвращается пустой массив.

Переводы страницы

getPublishedTranslations(string $translationKey): array

Возвращает опубликованные переводы, объединённые одним значением translation_key:

php
$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

Возвращает сохранённые языковые варианты главной страницы:

php
$versions = (new PageManager())->getMainPageVersions();

Каждый элемент содержит id, language и seo. Поле seo возвращается в виде массива.

База данных

__construct(?Database $db = null)

Без аргументов менеджер использует основной объект базы данных CMS:

php
$pageManager = new PageManager();

При необходимости можно передать другой экземпляр Database:

php
$pageManager = new PageManager($database);

Отличие от PageData

PageManager используется для поиска произвольной страницы и получения её языковых вариантов.

PageData содержит данные страницы или записи, уже определённой CMS для текущего запроса.

Важные замечания

  • getPublishedByUrl() и getPublishedTranslations() возвращают только страницы со статусом publish
  • пустой URL возвращает null
  • отсутствующая страница возвращает null
  • getPublishedTranslations() и getMainPageVersions() преобразуют поле seo в массив
  • получение страницы по идентификатору класс не поддерживает
  • для данных текущей страницы используйте PageData