PageData
PageData предоставляет данные страницы или записи текущего HTTP-запроса.Поддерживает
- получение содержимого текущей страницы или записи
- получение данных маршрута и шаблона
- работу с обычными и составными метаполями
- получение категорий, связанных страниц и записей
- формирование SEO-тегов, Open Graph, Twitter Cards и Schema.org
- получение комментариев
- получение языковых вариантов страниц и записей с формированием hreflang
- временную подмену данных текущего запроса
CMS автоматически предоставляет данные текущего запроса через PageData. Создавать экземпляр класса вручную не нужно.
Быстрый старт
$title = PageData::getTitle();
$content = PageData::getContent();
$image = PageData::getImage();Получение метаполя:
$subtitle = PageData::getMeta('subtitle');Основные данные
| Метод | Возвращает | Описание |
|---|---|---|
getId() |
int |
Идентификатор страницы или записи. |
getTitle() |
string |
Заголовок с экранированными HTML-символами; подходит для вывода в HTML. |
getRawTitle() |
string |
Исходный заголовок без HTML-экранирования. |
getPostName() |
string |
Название типа записи. |
getContent() |
string |
Основное содержимое. |
getImage() |
string |
Путь к изображению. |
getAuthorId() |
int |
Идентификатор автора. |
getCreateDate() |
string |
Дата создания. |
getPublishDate() |
string |
Дата публикации. |
getModifiedDate() |
string |
Дата последнего изменения. |
getViews() |
int |
Количество просмотров. |
getMore() |
string |
Дополнительное содержимое записи. |
Для обычного вывода заголовка в HTML используйте getTitle():
echo '<h1>' . PageData::getTitle() . '</h1>';getRawTitle() нужен, когда требуется исходный текст, например для собственной обработки. Перед выводом такого значения в HTML его необходимо экранировать с учётом места вывода. Повторно экранировать результат getTitle() не нужно.
Если значение отсутствует, строковые методы возвращают пустую строку, а числовые методы возвращают 0.
getImage(bool $domain = false): string
Без аргумента возвращает сохранённый путь:
$image = PageData::getImage();Для получения полного URL передайте true:
$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 значения могут выглядеть так:
getPageKey() -> news
getPageUrl() -> release-notes
getPostType() -> newsgetPageFullUrl(bool $domain = false): string
Возвращает путь с учётом языкового префикса:
$url = PageData::getPageFullUrl();Пример:
/ru/news/release-notesДля получения адреса с доменом передайте true:
$url = PageData::getPageFullUrl(true);Языковые варианты
getLanguageVersions(): array
Возвращает языковые варианты текущей страницы, записи или главной страницы:
$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.
Для запроса без включённой мультиязычности, обычной страницы или записи без translation_key метод возвращает пустой массив. Если существует только один языковой вариант, массив содержит один элемент, но hreflang не формируется.
Метаполя
getMeta($key, $row = false, $column = false): mixed
Возвращает значение метаполя:
$subtitle = PageData::getMeta('subtitle');Если метаполе содержит составное значение, без дополнительных аргументов возвращается весь массив:
$sections = PageData::getMeta('sections');Для получения отдельной ячейки передайте номер строки и столбца:
$title = PageData::getMeta(
'sections',
0,
0
);Если метаполе или указанная ячейка отсутствует, возвращается пустая строка.
Данные метаполей
Для методов объекта используйте текущий экземпляр:
$pageData = PageData::current();
$meta = $pageData->getMetaList();
$name = $pageData->getMetaName('subtitle');
$type = $pageData->getMetaType('subtitle');| Метод | Описание |
|---|---|
getMetaList() |
Возвращает все значения метаполей. |
getMetaName($key) |
Возвращает название метаполя. |
getMetaType($key) |
Возвращает тип метаполя. |
Связанные страницы и записи
getRelationItems($key): array
Возвращает данные страниц и записей, выбранных в метаполе типа relations:
$items = PageData::current()->getRelationItems('related-content');
$page = $items['page-7'] ?? null;
$post = $items['12-15'] ?? null;Каждый элемент результата содержит массив данных соответствующей страницы или записи. Ключ page-7 обозначает страницу с ID 7; ключ 12-15 — запись с ID 15 типа записей с ID 12.
Порядок выбранных материалов сохраняется. Отсутствующие материалы и ссылка на саму текущую страницу или запись пропускаются.
Если метаполе отсутствует, имеет другой тип или не содержит подходящих материалов, возвращается пустой массив.
Статус публикации и язык не используются как фильтры.
getRelations($key)
Возвращает только связанные записи, сгруппированные по названию типа записи и идентификатору:
$relations = PageData::current()->getRelations('related-content');
$post = $relations['news'][15] ?? null;Связанные страницы в результат не входят. Внутри каждого типа записи сортируются по ID по возрастанию.
Если метаполе отсутствует или имеет другой тип, возвращается пустая строка. Для метаполя relations без подходящих записей возвращается пустой массив.
Как и getRelationItems(), метод не фильтрует материалы по статусу публикации или языку.
Для получения только сгруппированных идентификаторов связей используйте PageData::getMeta($key). Этот метод не возвращает данные самих материалов.
Категории и глобальные данные
$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. |
Вывод тегов в шаблоне:
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
Возвращает исходный массив комментариев текущей записи:
$comments = PageData::getComments();comments(): ?CommentsList
Возвращает объект для работы с комментариями:
$comments = PageData::current()->comments();
$count = $comments?->publishCommentCount() ?? 0;Для страницы без объекта комментариев метод возвращает null.
Текущий экземпляр
current(): PageData
Возвращает текущий экземпляр:
$pageData = PageData::current();Подмена данных текущего запроса
Для изменения данных используйте текущий экземпляр:
$pageData = PageData::current();Изменения действуют только во время текущего запроса и не сохраняются в базе данных.
Основные значения
| Метод | Изменяемое значение |
|---|---|
setTitle($title) |
Заголовок, возвращаемый getTitle(). |
setContent($content) |
Содержимое, возвращаемое getContent(). |
setImage($img) |
Изображение, возвращаемое getImage(). |
setTemplate($template) |
Название, возвращаемое getTemplate(). |
setType($type) |
Тип, возвращаемый getType(). |
$pageData->setTitle('Временный заголовок');
$pageData->setContent('<p>Временное содержимое</p>');
$pageData->setImage('/upload/preview.jpg');Методы изменяют только данные PageData. Они не запускают маршрутизацию повторно и не сохраняют страницу.
setPostData($post)
Подменяет основные данные текущей записи:
$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
Подменяет определения и значения метаполей:
$pageData->setMeta([
'post_meta' => [
'subtitle' => [
'name' => 'Подзаголовок',
'type' => 'text',
],
],
'meta' => [
'subtitle' => 'Новый подзаголовок',
],
]);
$subtitle = PageData::getMeta('subtitle');post_meta содержит определения полей, а meta — их значения. Метод также принимает JSON-строку с определениями метаполей.
Переданные поля добавляются или заменяются. Остальные метаполя текущего объекта не удаляются.
Важные замечания
- класс описывает только текущий запрос
- для произвольной страницы используйте
PageManager - для произвольных опубликованных записей используйте
PostManager - не создавайте экземпляр
PageDataвручную - отсутствующие строковые значения обычно возвращаются как пустая строка
- методы подмены не сохраняют изменения в базе данных
- методы подмены не запускают маршрутизацию и выбор шаблона повторно
setPostData()требует полный набор перечисленных ключей