• Почему агент сам деактивируется?

    An3k
    @An3k
    Агент должен возвращать функцию агента

    return "\\Some\\Class\\Name::createTasks();";
    Ответ написан
    Комментировать
  • Как встроить \Bitrix\Main\UI\FileInput в iblock.element.add.form?

    An3k
    @An3k
    \Bitrix\Main\UI\FileInput довольно просто работать в любом месте сайта, достаточно получить данные файлов и с ними можно уже работать как угодно, отправляю форму на обработку или допустим вы в админке где то хотите вставить этот модуль и нет возможности отправить всю форму, тогда можно отследить события изменения и уже дальше эти данные слать куда вам надо.

    При простой подзагрузке файлов они сохраняются во временную директорию Битрикс обычно это
    \home\bitrix\.bx_temp\******sitemanager, а вам нужно уже далее это всё послать в форме или аяксом из полей.

    Простыми словами:
    1. вариант вы вставляете компонент в форму и шлёте форму как обычно на обработку со всеми полями.
    2. вариант вы берёте данные из полей шлёте яксом на сохранение и уже дальше работаете с id файлами как обычно.

    // загружены файлы
    BX.addCustomEvent('onAjaxSuccess', (e) => {
    
    // слать данные без формы можно прямо так
    $.ajax({
        type: 'POST',
        url : '/handler.php',
        data: { pics : e.files },
        success: function(data)
        { console.log(data) }
    })
    
    
    })
    
     // изменения
    BX.addCustomEvent('onFileinputIsChanged', (e) => {})
    
    // удаление
    BX.addCustomEvent('onFileIsDeleted', (e) => {})


    в обработчике есть один нюанс по поводу путей к файлам
    // 1. собираете массив файлов
    
        $i = 0;
        foreach( $_POST['pics'] as $itm){
            $arFile[$i]['hash'] = $itm['file']['hash'];
            $arFile[$i]['name'] = $itm['file']['files']['default']['name'];
            $arFile[$i]['type'] = $itm['file']['files']['default']['type'];
            $arFile[$i]['tmp_name'] = $itm['file']['files']['default']['path'];
            $arFile[$i]['size'] = $itm['file']['files']['default']['size'];
            $arFile[$i]['error'] = '';
            $i++;
        }
    
      // 2. нужно обязательно прогнать через CIBlock::makeFileArray( ); тогда будут верные пути и сможете сохранять файлы CFile::SaveFile(); иначе будет ошибка
    Ответ написан