PageData


PageData предоставляет данные страницы или записи текущего HTTP-запроса.

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

  • получение содержимого текущей страницы или записи
  • получение данных маршрута и шаблона
  • работу с обычными и составными метаполями
  • получение категорий и связанных записей
  • формирование SEO-тегов, Open Graph, Twitter Cards и Schema.org
  • получение комментариев
  • получение языковых вариантов страницы и формирование hreflang
  • временную подмену данных текущего запроса

CMS автоматически предоставляет данные текущего запроса через PageData. Создавать экземпляр класса вручную не нужно.

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

php
$title = PageData::getTitle();
$content = PageData::getContent();
$image = PageData::getImage();

Получение метаполя:

php
$subtitle = PageData::getMeta('subtitle');

Основные данные

Метод Возвращает Описание
getId() int Идентификатор страницы или записи.
getTitle() string Заголовок.
getPostName() string Название типа записи.
getContent() string Основное содержимое.
getImage() string Путь к изображению.
getAuthorId() int Идентификатор автора.
getCreateDate() string Дата создания.
getPublishDate() string Дата публикации.
getModifiedDate() string Дата последнего изменения.
getViews() int Количество просмотров.
getMore() string Дополнительное содержимое записи.

Если значение отсутствует, строковые методы возвращают пустую строку, а числовые методы возвращают 0.

getImage(bool $domain = false): string

Без аргумента возвращает сохранённый путь:

php
$image = PageData::getImage();

Для получения полного URL передайте true:

php
$image = PageData::getImage(true);

Данные маршрута

Метод Возвращает Описание
getPageKey() ?string Базовый ключ страницы или типа записи.
getPageUrl() ?string Оставшаяся часть маршрута после базового ключа.
getPage() ?string Значение параметра текущей административной страницы или null.
getPostTypeId() int Идентификатор типа текущей записи или 0.
getPostType() ?string Системное имя типа записи.
getPageFullUrl() string Полный путь текущей страницы.
getTemplate() string Название активного шаблона.
getType() string Тип текущего запроса.

Для URL записи /ru/news/release-notes значения могут выглядеть так:

text
getPageKey()  -> news
getPageUrl()  -> release-notes
getPostType() -> news

getPageFullUrl(bool $domain = false): string

Возвращает путь с учётом языкового префикса:

php
$url = PageData::getPageFullUrl();

Пример:

text
/ru/news/release-notes

Для получения адреса с доменом передайте true:

php
$url = PageData::getPageFullUrl(true);

Языковые варианты

getLanguageVersions(): array

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

php
$versions = PageData::getLanguageVersions();

foreach ($versions as $version) {
    echo '<a href="' . $version['url'] . '">' . $version['label'] . '</a>';
}

Каждый элемент содержит:

Поле Тип Описание
code string Код языка.
label string Отображаемое название языка.
url string Локализованный путь страницы.
absolute-url string Полный URL с доменом.
current bool Является ли язык текущим.
default bool Является ли язык языком сайта по умолчанию.
indexable bool Разрешена ли индексация языкового варианта.
canonical string Сохранённый canonical языкового варианта.

В результат включаются только активные языки, для которых существует соответствующая страница.

Для записи, запроса без включённой мультиязычности или страницы без translation_key метод возвращает пустой массив. Если существует только один языковой вариант, массив содержит один элемент, но hreflang не формируется.

Метаполя

getMeta($key, $row = false, $column = false): mixed

Возвращает значение метаполя:

php
$subtitle = PageData::getMeta('subtitle');

Если метаполе содержит составное значение, без дополнительных аргументов возвращается весь массив:

php
$sections = PageData::getMeta('sections');

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

php
$title = PageData::getMeta(
    'sections',
    0,
    0
);

Если метаполе или указанная ячейка отсутствует, возвращается пустая строка.

Данные метаполей

Для методов объекта используйте текущий экземпляр:

php
$pageData = PageData::current();

$meta = $pageData->getMetaList();
$name = $pageData->getMetaName('subtitle');
$type = $pageData->getMetaType('subtitle');
Метод Описание
getMetaList() Возвращает все значения метаполей.
getMetaName($key) Возвращает название метаполя.
getMetaType($key) Возвращает тип метаполя.

Связанные записи

getRelations($key)

Возвращает опубликованные записи, выбранные в метаполе типа relations:

php
$relations = PageData::current()->getRelations('related-posts');

Результат группируется по типу записи и идентификатору:

php
$post = $relations['news'][15] ?? null;

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

Категории и глобальные данные

php
$pageData = PageData::current();

$category = $pageData->getCategory('important');
$globalMeta = $pageData->getGlobalMeta('contacts', 'phone');
$globalCategory = $pageData->getGlobalCategory('regions', 'minsk');
$categoryList = $pageData->getGlobalCategoryList('regions');
Метод Описание
getCategory($key) Возвращает локальную категорию текущей записи.
getGlobalMeta($category, $key) Возвращает значение глобального метаполя.
getGlobalCategory($category, $key) Возвращает значение глобальной категории.
getGlobalCategoryList($category) Возвращает список глобальных категорий группы.

Перед вызовом getGlobalCategory() убедитесь, что нужный ключ существует в группе.

SEO

Метод Возвращает Описание
getSeoTitle() string SEO-заголовок.
getSeoDescription() string SEO-описание.
getSeoKeys() string Ключевые слова.
getNoIndex() string Признак запрета индексации.
getCanonical() string Сохранённый canonical.
getSeoHead() string Готовые SEO-теги и социальная разметка для head.
getFaviconUrl() string URL favicon.
getFaviconHead() string Готовый тег favicon.

Вывод тегов в шаблоне:

php
echo PageData::getSeoHead();
echo PageData::getFaviconHead();

getSeoHead() может сформировать:

  • заголовок страницы
  • description и keywords
  • robots
  • canonical
  • hreflang для языковых вариантов страницы
  • Open Graph
  • Twitter Cards
  • JSON-LD-разметку Schema.org

hreflang формируется автоматически, если существует не менее двух индексируемых языковых вариантов и среди них присутствует текущая страница.

Если отдельный SEO-заголовок, описание или ключевые слова не заданы, используются данные страницы и глобальные настройки сайта.

Для социальной разметки сначала используется изображение текущей страницы, а при его отсутствии — изображение по умолчанию из настроек SEO.

Open Graph и Twitter Cards учитывают состояние соответствующих настроек. Для страницы 404 социальная разметка, canonical и Schema.org не выводятся.

Базовая Schema.org-разметка описывает сайт и текущую страницу. Если странице или типу записей назначена отдельная схема, она дополняет данные текущей страницы.

Комментарии

getComments(): array

Возвращает исходный массив комментариев текущей записи:

php
$comments = PageData::getComments();

comments(): ?CommentsList

Возвращает объект для работы с комментариями:

php
$comments = PageData::current()->comments();
$count = $comments?->publishCommentCount() ?? 0;

Для страницы без объекта комментариев метод возвращает null.

Текущий экземпляр

current(): PageData

Возвращает текущий экземпляр:

php
$pageData = PageData::current();

Подмена данных текущего запроса

Для изменения данных используйте текущий экземпляр:

php
$pageData = PageData::current();

Изменения действуют только во время текущего запроса и не сохраняются в базе данных.

Основные значения

Метод Изменяемое значение
setTitle($title) Заголовок, возвращаемый getTitle().
setContent($content) Содержимое, возвращаемое getContent().
setImage($img) Изображение, возвращаемое getImage().
setTemplate($template) Название, возвращаемое getTemplate().
setType($type) Тип, возвращаемый getType().
php
$pageData->setTitle('Временный заголовок');
$pageData->setContent('<p>Временное содержимое</p>');
$pageData->setImage('/upload/preview.jpg');

Методы изменяют только данные PageData. Они не запускают маршрутизацию повторно и не сохраняют страницу.

setPostData($post)

Подменяет основные данные текущей записи:

php
$pageData->setPostData([
    'post_type' => 'news',
    'url' => 'preview',
    'title' => 'Предварительный просмотр',
    'content' => '<p>Содержимое записи</p>',
    'img' => '/upload/preview.jpg',
    'more' => '',
    'meta' => [],
    'comment' => [],
    'global_meta' => [],
    'category' => [],
    'global_category' => [],
]);

Передаваемый массив должен содержать все перечисленные ключи.

Ключ Описание
post_type Системное имя типа записи.
url Идентификатор записи в URL.
title Заголовок.
content Основное содержимое.
img Изображение.
more Дополнительное содержимое.
meta Значения метаполей.
comment Массив комментариев.
global_meta Глобальные метаполя.
category Категории записи.
global_category Глобальные категории записи.

Метод изменяет только перечисленные данные. Идентификатор, автор, даты, SEO и остальные значения текущего объекта сохраняются без изменений.

Массив comment становится доступен через getComments(). Объект, возвращаемый comments(), автоматически не пересоздаётся.

setMeta($meta): void

Подменяет определения и значения метаполей:

php
$pageData->setMeta([
    'post_meta' => [
        'subtitle' => [
            'name' => 'Подзаголовок',
            'type' => 'text',
        ],
    ],
    'meta' => [
        'subtitle' => 'Новый подзаголовок',
    ],
]);

$subtitle = PageData::getMeta('subtitle');

post_meta содержит определения полей, а meta — их значения. Метод также принимает JSON-строку с определениями метаполей.

Переданные поля добавляются или заменяются. Остальные метаполя текущего объекта не удаляются.

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

  • класс описывает только текущий запрос
  • для произвольной страницы используйте PageManager
  • для произвольных опубликованных записей используйте PostManager
  • не создавайте экземпляр PageData вручную
  • отсутствующие строковые значения обычно возвращаются как пустая строка
  • методы подмены не сохраняют изменения в базе данных
  • методы подмены не запускают маршрутизацию и выбор шаблона повторно
  • setPostData() требует полный набор перечисленных ключей