События

OnGetAdditionalParameters - событие для добавления параметров к меню

Для добавления дополнительных параметров к пунктам меню используйте событие OnGetAdditionalParameters. Событие вызывается в момент построения интерфейса редактирования меню. Первый параметр содержит идентификатор типа меню (например, "top"). Второй параметр содержит массив уже существующих параметров для типа меню.

Возможно добавление следующих типов параметров:

  • "text": Строка
  • "textarea": Текстовое поле
  • "select": Выпадающий список
  • "checkbox": Галочка
  • "filepath": Путь к файлу с возможностью выбора из медиабиблиотеки или структуры сайта

Для описания дополнительного параметра используется массив со следующими ключами:

  • "name": Строковый идентификатор параметра, будет использоваться в т.ч. в шаблоне компонента меню
  • "type": Тип параметра (описаны выше)
  • "caption": Название параметра
  • "default": Значение по умолчанию
  • "required": Обязательный (true) или необязательный (false)
  • "values": Массив значений для типа "Выпадающий список"

Пример использования события OnGetAdditionalParameters:


namespace Grain\Menu\Custom;


\
Bitrix\Main\EventManager::getInstance()->addEventHandler
    
'grain.menu'
    
'OnGetAdditionalParameters'
    
'\Grain\Menu\Custom\OnGetAdditionalParameters'
); 

function 
OnGetAdditionalParameters(\Bitrix\Main\Event $event
{
    
$menuType $event->getParameter(0);
    
$arParameters $event->getParameter(1);

    
$arAdditionalParameters = array();

    switch(
$menuType
    {
        case 
'top':
            
$arAdditionalParameters = array(
                array(
                    
"name" => "param1",
                    
"type" => "text",
                    
"caption" => "Доп. параметр 1",
                    
"default" => "Текст по умолчанию",
                    
"required" => true,
                ),
                array(
                    
"name" => "param2",
                    
"type" => "select",
                    
"caption" => "Доп. параметр 2",
                    
"values" => array(
                        
"" => "",
                        
"value1" => "Пункт 1",
                        
"value2" => "Пункт 2",
                        
"value3" => "Пункт 3",
                    ),
                    
"default" => "value2",
                    
"required" => false,
                ),
                array(
                    
"name" => "param3",
                    
"type" => "checkbox",
                    
"caption" => "Доп. параметр 3",
                    
"default" => "Y",
                    
"required" => false,
                ),
                array(
                    
"name" => "param4",
                    
"type" => "filepath",
                    
"caption" => "Доп. параметр 4",
                    
"default" => "",
                    
"required" => false,
                ),
                array(
                    
"name" => "param5",
                    
"type" => "textarea",
                    
"caption" => "Доп. параметр 5",
                    
"default" => "",
                    
"required" => false,
                ),
            );
        break;
    }
    
    
$arParameters array_merge($arParameters,$arAdditionalParameters);
    
    
$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS$arParameters);

    return 
$result;
}

OnPrepareMenuArray - событие при сохранении массива меню

Событие "OnPrepareMenuArray" вызывается при сохранении массива меню и может быть использовано для добавления или модификации пунктов меню. Первый параметр содержит идентификатор типа меню (например, "top"). Второй параметр содержит сохранямый массив пунктов меню.

Пример использования события OnPrepareMenuArray (изменение названия пункта меню с url = '/url/to/item/'):


namespace Grain\Menu\Custom;


\
Bitrix\Main\EventManager::getInstance()->addEventHandler
    
'grain.menu'
    
'OnPrepareMenuArray'
    
'\Grain\Menu\Custom\OnPrepareMenuArray'
); 

function 
OnPrepareMenuArray(\Bitrix\Main\Event $event
{
    
$menuType $event->getParameter(0);
    
$aMenuItems $event->getParameter(1);
    
    switch(
$menuType
    {
        case 
'top':
            foreach(
$aMenuItems as &$menuItem)
            {
                if(
$menuItem[1]!='/url/to/item/')
                    continue;
                
$menuItem[0] = "Новое название пункта меню";
            }
            unset(
$menuItem);
        break;
    }
    
    
$result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS$aMenuItems);

    return 
$result;
}