Cheatsheet пишется как набор сниппетов и шпаргалок, тут могут быть неполные фрагменты кода чтоб не раздувать размер документа.
Идея такова, что готовишься ты по другим материалам (у битрикса есть хороший курс для подготовки во второму экзамену), а cheatsheet нужен на случай если забыл метод\импорт и нужно быстро подсмотреть.
Доработка компонента
Основные файлы компонента
result_modifier.php
Описание: Выполняет дополнительные запросы к базе данных. Результаты запросов кешируются.
Добавить связь в ORM + импорты(use):
use Bitrix\Iblock\Elements\Element{API_CODE}Table; use Bitrix\Main\ORM\Fields\Relations\Reference; use Bitrix\Main\ORM\Query\Join; use Bitrix\Main\UserTable; ->registerRuntimeField(new Reference( 'REF_USER', UserTable::class, Join::on('this.USER.VALUE', 'ref.ID') ));
Кеширование результата:
$this->__component->SetResultCacheKeys(array('MY_TITLE', 'IS_OBJECT'));
component_epilog.php
Описание: Вызывается на каждом хите (не кешируется).
Пример установки свойств страницы:
$APPLICATION->SetPageProperty('prop_code', $value); // Устанавливать в component_epilog.php $this->__component->SetResultCacheKeys(array('MY_TITLE', 'IS_OBJECT')); // В result_modifier.php
Вывод информации в шаблоне сайта
template.php
Добавление контента в область вывода:
<?$this->SetViewTarget("sidebar");?> <!-- HTML-данные --> <?$this->EndViewTarget();?>
header.php
Вывод содержимого области:
<?$APPLICATION->ShowViewContent("sidebar")?>
Получение и изменение свойств страницы
Получение директории запрошенной страницы:
$rDir = $request->getRequestedPageDirectory(); // Например: "/catalog/category"
Вывод/изменение свойства страницы:
$APPLICATION->ShowProperty('prop_code'); $APPLICATION->SetPageProperty('prop_code', $value);
Модификация сформированной страницы
Обработчик события
OnEndBufferContent
:AddEventHandler('main', 'OnEndBufferContent', ['Class', 'Method']); public static function OnEndBufferContent(&$content) { $content = str_replace('#DATE#', date('d.m.Y'), $content); }
Добавление пункта в меню админки
Обработчик события
OnAdminContextMenuShow
:AddEventHandler('main', 'OnAdminContextMenuShow', [ EventHandlers::class, 'onAdminContextMenuShow' ]); class EventHandlers { public static function onAdminContextMenuShow(&$items) { $items[] = [ 'TEXT' => 'Задать вопрос', 'LINK' => $uri->getUri(), 'TITLE' => 'Отправить ссылку на текущую страницу администратору', ]; } }
Локализация
Использование локализации:
use \Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); echo Loc::getMessage('SMALL_LENGTH');
События перед отправкой почты
Обработчик события
OnBeforeEventAdd
:AddEventHandler('main', 'OnBeforeEventAdd', Array("MyForm", "OnBeforeEventAddHandler")); class MyForm { public static function OnBeforeEventAddHandler(&$event, &$lid, &$arFields) { $arFields["NEW_FIELD"] = "Новый макрос для почтового шаблона"; } }
События индексации
Обработчик события
BeforeIndex
<?php use Bitrix\Main\Loader; use Bitrix\Main\EventManager; // Подключаем модули Loader::includeModule('iblock'); Loader::includeModule('search'); // Регистрируем обработчик события для модуля поиска $eventManager = EventManager::getInstance(); $eventManager->addEventHandler( 'search', 'beforeIndex', 'addAuthorClassToReviewTitle' ); /** * Обработчик события beforeIndex * Добавляет класс автора рецензии к заголовку при индексации * * @param array $arFields - поля индексации * @return array */ function addAuthorClassToReviewTitle(array $arFields) { // Проверяем, что это рецензия (адаптируйте под ваш инфоблок) if ($arFields['MODULE_ID'] == 'iblock' && $arFields['PARAM2'] == 'ИД_вашего_инфоблока_рецензий') { // Получаем элемент инфоблока $res = CIBlockElement::GetByID($arFields['ITEM_ID']); if ($element = $res->Fetch()) { // Получаем значение свойства "Класс автора" (адаптируйте под ваше свойство) $property = CIBlockElement::GetProperty( $element['IBLOCK_ID'], $element['ID'], [], ['CODE' => 'AUTHOR_CLASS'] // Код свойства класса автора ); if ($prop = $property->Fetch()) { $authorClass = $prop['VALUE']; if ($authorClass) { // Добавляем класс автора к заголовку $arFields['TITLE'] .= ' [' . $authorClass . ']'; } } } } return $arFields; }
Событие для изменения глобального меню админки
Обработчик события
OnBuildGlobalMenu
<?php use Bitrix\Main\Loader; use Bitrix\Main\EventManager; // Подключаем модули Loader::includeModule('main'); // Регистрируем обработчик события для главного модуля $eventManager = EventManager::getInstance(); $eventManager->addEventHandler( 'main', 'OnBuildGlobalMenu', 'addGlobalMenuItem' ); /** * Обработчик события OnBuildGlobalMenu * * @param array $aGlobalMenu - массив пунктов глобального меню админки (Контент, Настройки) * @param array $aModuleMenu - массив пунктов подменю глобального меню (Избранное, Пользователи) * @return array */ fpublic static function addGlobalMenuItem(&$aGlobalMenu, &$aModuleMenu) { $aMenu = [ 'menu_id' => 'newItem', 'text' => 'Новый пункт', ]; $aGlobalMenu['global_menu_new'] = $aMenu; $aMenuItem = [ 'parent_menu' => 'global_menu_new', 'text' => 'Новый подпункт', 'url' => 'link1' ]; $aModuleMenu[] = $aMenuItem; }