Документация для разработчиков

Система хуков

Внимание! Мы настоятельно рекомендуем ознакомиться сначала с REST-документацией модуля Сайты, чтобы понять как модуль функционирует (тем более REST доступен и в коробочной версии). Данную документацию рассматривайте как подспорье при работе в коробке, когда вам действительно мало функционала REST, или вы хотите детальнее разобраться в API.

На данный момент система не поддерживает расширение хуков силами сторонних разработчиков. Данная информация дана для ознакомления.

У сайтов и страниц есть ряд настроек, которые описаны на страницах дополнительных полей сайтов и страниц. Но как система работает с данными? Например, выводит соответствующий код счетчика аналитики, имея на входе лишь идентификатор счетчика?

Реализовано это через систему хуков. Это классы в пространстве имен Bitrix\Landing\Hook\Page. Один хук = один класс = один файл.

Каждый класс состоит минимум из трех обязательных методов:

  1. getMap(). Возвращает карту описания хука, какие поля и в каком порядке выводить в интерфейсе настроек.
  2. enabled(). Именно этот метод определяет, сработает ли хук для сущности. Например, упомянутый выше счетчик может быть указан в настройках, но не стоит галочка (тоже поле хука) "использовать счетчик".
    Если и у сайта и у его страницы один и тот же хук включен (enabled вернул true), то будет задействован хук страницы.
  3. exec(). Основной исполняемый метод. Запускается на исполнение, если enabled дал добро.

Данные же, с которыми работает хук, хранится в линейной таблице с привязкой данных каждого поля каждого хука к странице/сайту.


Событие выполнение хука

Расширить набор хуков пока нельзя, но есть возможность переопределить работу того или иного хука.

Пример:

$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('landing', 'onHookExec',
   function(\Bitrix\Main\Event $event)
   {
      $result = new \Bitrix\Main\Entity\EventResult;

      $result->modifyFields([
         'METAOG' => function(/** @var \Bitrix\Landing\Hook\Page $hook */ $hook)
         {
             \Bitrix\Landing\Manager::setPageView(
                'MetaOG',
               '<meta property="og:image" content="/my/og/picture.png" />'
             );

             // получить массив всех полей хука
             $fields = $hook->getFields();

             // получить текущее значение конкретного поля
             $fields['DESCRIPTION']->getValue();

            //обязательно вернуть true, если НЕ требуется выполнение системного
            return true;
         }
      ]);

      return $result;
   }
);

В примере показано как переопределить работу хука "Вид страницы в социальных сетях", или проще говоря og-теги. Ваше событие должно вернуть массив посредством modifyFields, где ключами будут коды хуков, которые вы хотите переопределить (в частном случае один). Значения - анонимные функции, которые и будут вызваны в момент исполнения соответствующего хука. Коды хуков перечислены ниже.

Внимание. Если некоторые системные хуки могут быть отключены (например, через опцию интерфейса "Использовать"), то после регистрации вашего обработчика, он будет вызываться всегда, так как система передает исполнение вам.

На вход анонимной функции поступает экземпляр $hook класса \Bitrix\Landing\Hook\Page, через который можно обратиться ко всем полям хука и их текущим данным.

Какие же существуют коды хуков, которые можно переопредилить?

Код Название
B24BUTTON Виджет на сайт
BACKGROUND Фон страницы
FAVICON Favicon
GACOUNTER Google Analytics
GMAP Карта Google
GTM Google Tag Manager
HEADBLOCK Пользовательский HTML и CSS
METAMAIN Мета-теги страницы
METAOG Вид страницы в соцсетях
METAROBOTS Индексация в поисковых системах
PIXELFB Размещение пикселя Facebook
PIXELVK Размещение пикселя ВКонтакте
UP Кнопка "вверх"
VIEW Тип представления
YACOUNTER Яндекс.Метрика

Подсмотреть как работают те или иные системные хуки можно в пространстве хуков Bitrix\Landing\Hook\Page.



Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2019, «1С-Битрикс», 2019
Наверх