Введение
Статические страницы в Битрикс — это обычные HTML-файлы, сохранённые в структуре сайта. На них нет компонентов вроде bitrix:news.detail или bitrix:catalog.element, из которых система могла бы автоматически «вытащить» заголовок, описание и другие мета-данные. Рассмотрим, как это работает, на примере стандартного интернет-магазина, доступного к скачиванию с официального сайта через файл bitrix_setup.php.
Файл .section.php в корне сайта
Для начала рассмотрим файл index.php в корне сайта. По умолчанию заголовок и свойства страницы задаются в файле .section.php в корне сайта. Вот пример кода:
$sSectionName = "Главная страница";
$arDirProperties = [
"description" => "Мы предлагаем широкий ассортимент качественной одежды по адекватным ценам.",
"keywords" => "женская одежда, мужская одежда, спортивная одежда, тапочки",
"title" => "Магазин одежды",
"keywords_inner" => "one, two, three",
];
Где:
$sSectionName— отвечает за хлебные крошки (breadcrumbs)$arDirProperties— массив со свойствами страницы, устанавливаемыми в настройках модуля "Управление структурой"
Этот массив редактируется через панель "Эрмитаж" (Изменить раздел → Свойства раздела).
Добавление пользовательских свойств
Также в этот массив можно добавить свойства, не установленные в настройках, но для этого нам нужно редактировать файл .section.php напрямую через редактор. Дополним файл свойствами robots и author. Наш массив примет вид:
$arDirProperties = Array(
"description" => "Мы предлагаем широкий ассортимент качественной одежды по адекватным ценам.",
"keywords" => "женская одежда, мужская одежда, спортивная одежда, тапочки",
"title" => "Магазин одежды",
"keywords_inner" => "one, two, three",
"robots" => "noindex, nofollow",
"author" => "Andrey"
);
Теперь значения этих свойств можно редактировать в панели "Эрмитаж" через свойства раздела.
Следует указать ещё одну особенность: метатег robots сразу добавился в <head> сайта. А вот свойства keywords_inner и author при необходимости обрабатываются вручную. Их можно получить методом $APPLICATION->GetProperty("КЛЮЧ_СВОЙСТВА_В_МАССИВЕ") или сразу вывести на экран $APPLICATION->ShowProperty("КЛЮЧ_СВОЙСТВА_В_МАССИВЕ") на странице index.php, которая унаследовала эти значения из .section.php.
$APPLICATION->GetPageProperty("КЛЮЧ_СВОЙСТВА_В_МАССИВЕ") не вернёт унаследованного свойства из .section.php.
Редактирование через панель "Эрмитаж"
Также свойства можно указать в самом файле index.php через панель "Эрмитаж" (Изменить страницу → Заголовок и свойства страницы). Тут мы переопределяем наследуемые свойства. И для переопределённых свойств будет работать также метод $APPLICATION->GetPageProperty("КЛЮЧ_СВОЙСТВА_В_МАССИВЕ").
Переопределение свойств в файле
Можно не использовать панель "Эрмитаж", редактируя index.php напрямую. Свойства, как существующие, так и новые, задаются методом:
$APPLICATION->SetPageProperty("PROP_ID", "Значение");
Где PROP_ID — это КЛЮЧ_СВОЙСТВА_В_МАССИВЕ переопределяемого свойства или ключ нового свойства.
Особая логика работы со свойством title
Для свойства title предусмотрена более глубокая логика. Это свойство можно задать как методом $APPLICATION->SetTitle("Значение свойства 1"), так и методом $APPLICATION->SetPageProperty("title", "Значение свойства 2").
Случай 1: Установка через SetTitle()
В первом случае ($APPLICATION->SetTitle("Значение свойства")) метод $APPLICATION->GetPageProperty("title") не вернёт заданного значения. Будут работать методы:
$APPLICATION->SetTitle("Значение свойства 1");
$APPLICATION->GetProperty("title");
// вернёт значение свойства, заданное в массиве $arDirProperties файла .section.php. Если такового нет — пустое значение
$APPLICATION->ShowProperty("title");
// выведет значение свойства, заданное в массиве $arDirProperties файла .section.php. Если такового нет — пустое значение
$APPLICATION->ShowTitle();
// выведет значение свойства, заданное в массиве $arDirProperties файла .section.php. Если такового нет — выведет "Значение свойства 1" на экран
$APPLICATION->ShowTitle(false);
// выведет "Значение свойства 1" на экран
$APPLICATION->GetPageProperty("title");
// пустое значение
Случай 2: Установка через SetPageProperty()
Второй случай. Зададим значение свойства через $APPLICATION->SetPageProperty("title", "Значение свойства 2"):
$APPLICATION->SetPageProperty("title", "Значение свойства 2");
$APPLICATION->GetProperty("title");
// вернёт "Значение свойства 2"
$APPLICATION->ShowProperty("title");
// выведет "Значение свойства 2"
$APPLICATION->ShowTitle();
// выведет "Значение свойства 2"
$APPLICATION->ShowTitle(false);
// пустое значение
$APPLICATION->GetPageProperty("title");
// выведет "Значение свойства 2"
Случай 3: Использование обоих методов
Третий случай — использование обоих методов:
$APPLICATION->SetPageProperty("title", "Значение свойства 2");
$APPLICATION->SetTitle("Значение свойства 1");
// Порядок подключения методов не имеет значения
$APPLICATION->GetProperty("title");
// вернёт "Значение свойства 2"
$APPLICATION->ShowProperty("title");
// выведет "Значение свойства 2"
$APPLICATION->ShowTitle();
// выведет "Значение свойства 2"
$APPLICATION->ShowTitle(false);
// выведет "Значение свойства 1"
$APPLICATION->GetPageProperty("title");
// выведет "Значение свойства 2"
Случай 4: Свойство title не установлено
Четвёртый случай. Не установлено свойство title на странице:
$APPLICATION->GetProperty("title");
// вернёт значение свойства, заданное в массиве $arDirProperties файла .section.php. Если такового нет — пустое значение
$APPLICATION->ShowProperty("title");
// выведет значение свойства, заданное в массиве $arDirProperties файла .section.php. Если такового нет — пустое значение
$APPLICATION->ShowTitle();
// выведет значение свойства, заданное в массиве $arDirProperties файла .section.php. Если такового нет — пустое значение
$APPLICATION->ShowTitle(false);
// выведет пустое значение
$APPLICATION->GetPageProperty("title");
// пустое значение
Важное замечание о порядке применения
Работа со страницами, отличными от index.php
Для страниц, название которых отличается от index.php, функционал похож, но не один в один. Рекомендую для новых страниц, которые участвуют в визуале, создавать папки, внутри папок — индексный файл и файл .section.php. Тогда работа со свойствами сведётся к уже вышеописанной для корня сайта.
Причём, если значения свойств в .section.php раздела не заданы, они наследуются из вышележащего раздела или корня сайта.