Добавление в множественное поле, универсального списка, типа "Файл" из формы сайта в CRM
1) У формы должен быть атрибут enctype со значением multipart/form-data (enctype="multipart/form-data");
2) В обработчике формы разбираем глобальную переменную $_FILES
[CODE]//из формы передаеться произвольное число фотографий, которые должны быть добавлены в множественное поле типа файл в универсальном списке.
function set_foto($name_comp=false, $shop_id=false, $day_of_invoice=false, $inner_num=false){
$razreshenniye_simvoli = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$random_number = substr(str_shuffle($razreshenniye_simvoli), 0, 15);
$name = $random_number.'.'.pathinfo( $_FILES['pictures']['name'][0], PATHINFO_EXTENSION );
// запоминаем сколько у нас фотографий в массиве
$count_pic = count($_FILES['pictures']['name']);
$params = array(
'id' => 1633722, // id папки, специального метода для определения id нет, так что ищем его через инструменты разработчика
'data' => array(
'NAME' => $name,
),
'fileContent' => base64_encode(file_get_contents($_FILES['pictures']['tmp_name'][0]))
);
// добавляем файл на диск
$result = CRest::call('disk.folder.uploadfile', $params);
// echo '<pre> добавил первый файл ';print_r($result);echo '</pre>';
// сохраняем FILE_ID для того что бы подставить в запрос на добавление файла в список
$file_id = $result['result']['FILE_ID'];
// сохраняем ID файла что бы потом почистить за собой и удалить его с диска
$element_id = $result['result']['ID'];
// echo '<pre> ID записи файла ';print_r($file_id);echo '</pre>';
$random_number = substr(str_shuffle($razreshenniye_simvoli), 0, 15);
$params = array(
"IBLOCK_TYPE_ID" => 'lists',
"IBLOCK_ID" => 92,
"ELEMENT_CODE" => $random_number, //случайный ID элемента,без него не добавит в список новую запиcm
"FIELDS"=> array(
"NAME" => $name_comp, // название магазина списком
"PROPERTY_638" =>$shop_id, // id магазина
"PROPERTY_616" =>$file_id, // FILE_ID у файла добавленного ранее на диск
"PROPERTY_620" =>$day_of_invoice, // дата за какое документ
"PROPERTY_640" =>$inner_num, // внутренний номер магазина
)
);
// добавляем запись в список
$result = CRest::call('lists.element.add', $params);
$ELEMENT_id = $result['result']; // сохраняем для того что бы добавить вторую и далее фотографии
// echo '<pre> params';print_r($params);echo '</pre>';
// echo '<pre> результат добавления в список ';print_r($result['result']);echo '</pre>';
// чистим за собой и удаляем файл с диска
$params = array('id' => $element_id);
CRest::call('disk.file.delete', $params);
if($count_pic > 1){
// echo '<pre> елементов в массиве ';print_r(count($_FILES['pictures']['name']));echo '</pre>';
for($i =1; $i < $count_pic; $i++){
$random_number = substr(str_shuffle($razreshenniye_simvoli), 0, 15);
$name = $random_number.'.'.pathinfo( $_FILES['pictures']['name'][$i], PATHINFO_EXTENSION );
$params = array(
'id' => 1633722, // id папки, как нашли смотри выше
'data' => array(
'NAME' => $name,
),
'fileContent' => base64_encode(file_get_contents($_FILES['pictures']['tmp_name'][$i]))
);
$result = CRest::call('disk.folder.uploadfile', $params);
// echo '<pre> добавил первый файл ';print_r($result);echo '</pre>';
$file_id = $result['result']['FILE_ID'];
$element_id = $result['result']['ID'];
// echo '<pre> ID записи файла ';print_r($file_id);echo '</pre>';
$random_number = substr(str_shuffle($razreshenniye_simvoli), 0, 15);
$params = array(
"IBLOCK_TYPE_ID" => 'lists',
"IBLOCK_ID" => 92,
"ELEMENT_ID" => $ELEMENT_id, //случайный ID элемента,без него не добавит в список новую запиcь, не путать с $element_id
"FIELDS"=> array(
"NAME" => $name_comp, // название магазина списком
"PROPERTY_638" =>$shop_id, // id магазина
"PROPERTY_616" =>$file_id, // FILE_ID у файла добавленного ранее на диск
"PROPERTY_620" =>$day_of_invoice, // дата за какое документ
"PROPERTY_640" =>$inner_num, // внутренний номер магазина
)
);
$result = CRest::call('lists.element.update', $params); // при обновлении, старые записи во множественном поле не затираються
// echo '<pre> params';print_r($params);echo '</pre>';
// echo '<pre> результат добавления в список ';print_r($result['result']);echo '</pre>';
$params = array('id' => $element_id);
CRest::call('disk.file.delete', $params);
}
};
}
set_foto("магазин", 49684, "25.05.2022", 12029);[/CODE]