Задать вопрос
  • Как добиться выполнения файла script.js и других скриптов при подгрузке верстки компонента по AJAX?

    An3k
    @An3k
    Всё на самом деле просто.

    Что бы в любой своём файле, даже без компонента добиться выполнения отложенных функций, например
    $APPLICATION->SetAdditionalCSS или $APPLICATION->AddHeadScript

    нужно вызвать пролог и проверсти инициализацию так сказать Ajax шапки
    вот так примерно будет выглядить файл ajax обработчик
    <?
    require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
    $APPLICATION->ShowAjaxHead(); // !только в таком порядке, если вызовете после, шапка затрёт вам скрипты
    $APPLICATION->SetAdditionalCSS( "style.css", true);
    $APPLICATION->AddHeadScript( "script.js" );

    // далее ваш любой код или вёрстка
    ?>

    Обратите внимание что если такой файл просто открыть в браузре и если вы всё верно сделали в верху будут пути до файлов в виде js вызовов.
    Ответ написан
    Комментировать
  • Почему агент сам деактивируется?

    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(); иначе будет ошибка
    Ответ написан