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 |
Заголовок. |
getPostName() |
string |
Название типа записи. |
getContent() |
string |
Основное содержимое. |
getImage() |
string |
Путь к изображению. |
getAuthorId() |
int |
Идентификатор автора. |
getCreateDate() |
string |
Дата создания. |
getPublishDate() |
string |
Дата публикации. |
getModifiedDate() |
string |
Дата последнего изменения. |
getViews() |
int |
Количество просмотров. |
getMore() |
string |
Дополнительное содержимое записи. |
Если значение отсутствует, строковые методы возвращают пустую строку, а числовые методы возвращают 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) |
Возвращает тип метаполя. |
Связанные записи
getRelations($key)
Возвращает опубликованные записи, выбранные в метаполе типа relations:
$relations = PageData::current()->getRelations('related-posts');Результат группируется по типу записи и идентификатору:
$post = $relations['news'][15] ?? null;Если связь не определена, метод возвращает пустую строку.
Категории и глобальные данные
$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()требует полный набор перечисленных ключей