+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Использование событий

Для дополнения и неявного изменения (без вмешательства в код компонента) логики работы используйте технологию Событий. Рассмотрим пример использования событий.

Прямое назначение ответственного в Техподдержке

Есть потребность напрямую назначать ответственного за обращение в техподдержку. Такое бывает, когда сотрудники компании хорошо знают друг друга, либо когда клиенты ТП желают общаться с конкретным сотрудником.

Есть два варианта решения данной задачи:

  • Модифицируется код стандартного компонента support.wizard в файлах component.php и .description.php. Также, для большей гибкости, можно установить переменную-флаг в файле .parameters.php.

    Такой подход для непосвященного в такие понятия, как События в Bitrix Framework наиболее очевиден. В результате, задача резко усложняется - нужно разбираться в логике кода компонента, чтобы понять, где нужно добавить свой функционал, а также, не стоит забывать о том, что Bitrix Framework постоянно обновляется. Решение довольно трудоёмкое.

  • Достаточно будет использовать События и модифицировать шаблон.

Теория Событий вам знакома. Вкратце повторимся: в код ядра, обычно в начало и конец вызова системной функции, разработчики уже вставили вызов системной функции, в нашем случае это: CTicket::ExecuteEvents. Если мы хотим дополнить эту функцию своей, то в файле /bitrix/php_intrface/init.php пишем:

AddEventHandler("support", "OnAfterTicketAdd", "MyHandler");

Если вызываемая функция принадлежит классу, то нужно вместо MyHandler написать array("","");. Код файла init.php:

<?
// В массиве $arFields передаются все параметры, которые были переданы созданному тикету + ID и MID тикета
// $_REQUEST["PERSONAL"] - Значение, которое мы получаем из нашего шаблона (тега select)    
function AfterTicketAdd($arFields) 
{
   if ($_REQUEST["PERSONAL"]>0) 
   {
      //Добавляем к уже созданому тикету свойство "RESPONSIBLE_USER_ID"=>    
      CTicket::Set(array(
          "RESPONSIBLE_USER_ID"=>$_REQUEST["PERSONAL"]),
         $intMessage,
         $arFields['ID'],
         "N"
      ); 
   }
}
?>

$intMessage - ID нового сообщения, нам не нужно, "N" - здесь указывается, что права на добавление нам проверять не надо.

Модификация шаблона

  • Скопируйте шаблон системного компонента
  • Добавьте в шаблон следующий код:
    <?
    use Bitrix\Main\Localization\Loc;
    
    // список всех сотрудников техподдержки
    // полученный через CTicket::GetSupportTeamList()
    $teamList = $arResult['TEAM_LIST'];
    
    ?>
    <select name="PERSONAL" id="PERSONAL">
       <option><?= Loc::getMessage('select_any') ?></option>
       <? foreach ($teamList as $item): ?>
            <option value="<?= $item['REFERENCE_ID'] ?>"><?= $item['REFERENCE'] ?></option>
        <? endforeach ?>
    </select>
  • При необходимости допишите локализацию на вашем родном языке.
  • Добавьте шаблон в файл ticket_edit.php.



Назад в раздел

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












CAPTCHA