Привязываем шаблоны к страницам и разделам сайта используя выражение PHP

Alexander K.
1С-Bitrix
20.09.2017
122

В Битриксе предусмотрено множество вариантов рационального использования шаблонов. Одним из наиболее интересных является метод привязки шаблона к разделам посредством выражения PHP. Главная особенность данного метода заключается в том, что администратор может указать не просто какой-то отдельно взятый файл или раздел (как в случае с условием "Для папки и файла") для выбранного шаблона, а прописать условие, при котором этот самый шаблон будет применяться к конкретному разделу или ряду файлов.

Например, если нужно привязать созданный шаблон к разделу с условием, что он применяется только к файлам *.php, при этом не затрагивает подразделы, находящиеся в данной папке. Разберём это задачу.

Будем исходить из того, что и шаблон и директория (где предполагалось этот шаблон использовать) были ранее созданы. Теперь необходимо привязать шаблон к созданной папке. Для этого переходим сюда (не забываем добавить свой домен):

/bitrix/admin/site_admin.php?lang=ru
Выбираем сайт, куда этот шаблон будет применён (как правило в списке он будет один, если не реализована многосайтовость). Далее, прокручиваем страницу вниз до раздела "Шаблон сайта". Здесь шаблоны прикрепляются к конкретным разделам сайта.
Список шаблонов сайта Необходимо выбрать из списка созданный ранее шаблон и задать ему тип привязки "Выражение PHP". Теперь требуется написать само выражение, по которому шаблон будет привязываться только к страницам *.php в заданной директории. Оно выглядит следующим образом:
preg_match("#^/dev/([a-zA-Z]+)\.php.*#", $APPLICATION->GetCurPage(true));
Разберём код подробнее. Функция preg_match() ищет строку по заданному шаблону. Шаблоном, в данном случае, является регулярное выражение #^/dev/([a-zA-Z]+)\.php.*#. Распишу, что здесь написано:
  • Решетка # - обозначает начало и завершение шаблона регулярного выражения. Решетка ограничивает всё условие, по которому функция ищет совпадения.
  • Знак ^ - обозначает начало строки. То есть функция будет искать совпадения только в начале передаваемого значения.
  • Слэш / - просто знак /, обозначает уровни пути до конечного файла.
  • /dev/ - папка, к которой привязывается шаблон.
  • Выражение ([a-zA-Z]+) - обозначает наличие символов в нижнем (a-z) и верхнем (A-Z) регистре, в количестве больше одного (знак +). Знак + означает предыдущий символ (в нашем случае это множество символов, заданное в квадратных скобках) может идти 1 или больше раз.
  • Конструкция \. - обозначает, что знак после обратного слэша \ необходимо читать как есть. То есть просто точка. Без обратного слэша точка означает один любой символ без ограничений. Таким образом, конструкция вида \.php равна .php.
  • Завершающая конструкция .* - говорит о том, что после .php может быть любое количество любых символов. Эта конструкция необходима, т.к. могут быть различные PHP конструкции в адресной строке (например вида ?ELEMENT_ID=46284&clear_cache=Y).
Завершает функцию preg_match метод Битрикса $APPLICATION->GetCurPage(true). Данный метод возвращает путь к текущей странице относительно корня, возвращая url без изменений. В итоговом виде это выглядит так: Шаблон сайта