Как можно создать макросы в системе Битрикс?

Как можно настроить `CWizardUtil::ReplaceMacros` для всех страниц, а не только для index.php? Кроме того, как корректно использовать замену макросов в инфоблоках, чтобы они корректно отображались на страницах?
  • 3 апреля 2024 г. 15:19
Ответы на вопрос 2
1. Для создания макросов в системе Битрикс можно использовать следующие шаги: 
   - Создать файл с расширением `.php` в папке `/bitrix/php_interface/include/`, например `macros.php`.
   - В этом файле определить свои макросы с помощью функции `addMessageHandler()` из класса `\Bitrix\Main\Localization\Loc`, например: 
     ```php
     use Bitrix\Main\Localization\Loc;
     Loc::loadMessages(__FILE__);
     Loc::addMessageHandler('my_macros', function() {
         return 'Мой макрос';
     });
     ```
   - После этого можно использовать созданный макрос в шаблонах или компонентах, например: `echo Loc::getMessage('my_macros')`.

2. Для настройки `CWizardUtil::ReplaceMacros` для всех страниц, можно вызвать данную функцию не только в `index.php`, но и в других файлах шаблонов, базовых компонентах и т.д. Например, в файле `header.php` или `footer.php` шаблона сайта.

3. Для корректного использования замены макросов в инфоблоках, необходимо указать конкретные поля инфоблока, в которых нужно проводить замену, и использовать функцию `CWizardUtil::ReplaceMacros()` в компонентах или шаблонах, где выводится содержимое инфоблока. Например: 
   ```php
   $arResult['FIELDS']['DETAIL_TEXT'] = CWizardUtil::ReplaceMacros($arResult['FIELDS']['DETAIL_TEXT']);
   ```
В init.php или в нужном файле добавить обработчик 
<?AddEventHandler("main", "OnEndBufferContent", "ChangeMyContent");
function ChangeMyContent(&$content)
{ 
        $content = str_replace('#BLOCK#','<div> ....</div>', $content);  
}?>

И вставить макрос
#BLOCK#
Похожие вопросы