Очень полезный инструмент, который не так очевиден начинающим разработчикам – отложенные функции Битрикса.
Что такое отложенные функции Битрикса и как их применять
Давайте разберем на простом примере, в какой последовательности идет сбор итогового HTML:
1. подключается “ядро” системы, и загружаются различные классы, методы, константы и т.д.
2. HTML записывается в буфер, и пока что никуда не выводится
3. При помощи инструмента отложенных функций, мы отмечаем место в HTML, в которое потому будет записано последнее установленное значение, например:
... <title>##MY_TITLE##</title> </head> ...
шаг 3, это как раз и есть ShowProperty, если вы знакомы с Битриксом, то вы наверняка писали в коде:
<title><?$APPLICATION->ShowTitle();?></title>
ShowTitle() это такая же самая отложенная функция, как и ShowProperty. На этом шаге мы задали “метку”.
4. в коде компонента, или на странице, вы задаете значение для вашей “метки” при помощи SetPageProperty.
С теорией разобрались, теперь перейдем к практическому примеру:
Задача. Необходимо добавить в body динамический класс, который будет задаваться либо в коде страницы, либо в компоненте (помните, в компоненте, у которого используется кеш, задавать можно только в component_epilog.php, иначе, с включенным кешем будет ошибка).
Решаем задачу. В body пишем такой код (знак “=” или echo ставить не нужно):
<body class="<?$APPLICATION->ShowProperty('CLASS')?>">
Поставили метку, идем дальше. В коде задаем SetPageProperty (вы могли применять эту функцию для title, description, keywords):
<?$APPLICATION->SetPageProperty("CLASS", "main");?>
$APPLICATION->GetProperty(‘CLASS’) – применяется гораздо реже, и не вернет вам ничего, если SetPageProperty будет установлен ниже вызова GetProperty. Применяется очень редко, поэтому решайте сами нужен ли он вам 🙂
Пытаюсь поставить noindex для страниц пагинации. Ставлю в header этот код:
SetPageProperty(“robots”, “noindex, nofollow”);
};
?>
Но ничего не происходит. В чем может быть загвоздка?
если у вас при сбросе кеша данная ошибка пропадает, то причина в кешировании компонента, и код установки нужно вынести в компонент эпилог.
если же установка свойства не проставляется даже при ?clear_cache=Y – то нужно переписывать механизм установки данного свойства