Быстренько о пугающем. Вернее, оно пугает ровно до тех пор, пока не понял, как это сделать. Дальше - проще некуда. Для элемента ИБ создаём свойство типа Файл и ставим на этом свойстве галочку Множественное. Тут и вопрос сразу назрел, а как туда добавить сразу несколько файлов?
Сегодня - быстрый разговор о добавлении файлов в поле типа Файл с включенным свойством Множественное.
API-шная функция MakeFileArray умеет работать с
1. ID файла (таковой например возвращается для поля PREVIEW_PICTURE)
2. абсолютный путь к файлу
3. полный URL к файлу, лежащему где угодно
То есть нас вообще практически не волнует, что делает эта функция. Главное, что она всасывает данные и отдаёт однообразный массив; так мясорубка выдаёт нам однообразную по консистенции массу как из мяса, так и из варёных макарон (если кому-то взбредёт в голову их прокрутить, как мне вот сейчас).
Не нарадуюсь на эту функцию, очень удобная.
Наша же функция add_test_files формирует массив, который можно уже отдавать при добавлении элемента инфоблока.
Сегодня - быстрый разговор о добавлении файлов в поле типа Файл с включенным свойством Множественное.
function add_test_files() { //для примера будем формировать нужный массивчик из списка тестовых файлов //дабы не городить форму.. мне лень, ага $arFiles = array( $_SERVER["DOCUMENT_ROOT"].'/upload/test/spare2.pdf', $_SERVER["DOCUMENT_ROOT"].'/upload/test/spare3.doc', $_SERVER["DOCUMENT_ROOT"].'/upload/test/spare5.jpg', ); foreach ($arFiles as $f_key=>$f_path) { $ffile = CFile::MakeFileArray($f_path); $ffile['MODULE_ID'] = 'main'; $arRet['n'.$f_key] = $ffile; } }
API-шная функция MakeFileArray умеет работать с
1. ID файла (таковой например возвращается для поля PREVIEW_PICTURE)
2. абсолютный путь к файлу
3. полный URL к файлу, лежащему где угодно
То есть нас вообще практически не волнует, что делает эта функция. Главное, что она всасывает данные и отдаёт однообразный массив; так мясорубка выдаёт нам однообразную по консистенции массу как из мяса, так и из варёных макарон (если кому-то взбредёт в голову их прокрутить, как мне вот сейчас).
Не нарадуюсь на эту функцию, очень удобная.
Наша же функция add_test_files формирует массив, который можно уже отдавать при добавлении элемента инфоблока.
Array ( [n0] => Array ( [name] => spare2.pdf [size] => 2407311 [tmp_name] => ****/upload/test/spare2.pdf [type] => application/pdf [MODULE_ID] => main ) [n1] => Array ( [name] => spare3.doc [size] => 22457 [tmp_name] => ****/upload/test/spare3.doc [type] => text/rtf [MODULE_ID] => main ) [n2] => Array ( [name] => spare5.jpg [size] => 123837 [tmp_name] => ****/upload/test/spare5.jpg [type] => image/jpeg [MODULE_ID] => main ) )Теперь можно и элемент добавить. Вообще, я надеюсь, вы тут и без меня должны справиться =) Навскидку получим что-нибудь вроде вот этого:
$arNeededFields = array( 'ACTIVE'=>'Y', 'IBLOCK_ID'=>$iblock_id, //айдишка ИБ 'IBLOCK_SECTION_ID'=>$iblock_section_id, //айдишка раздела ИБ 'NAME'=>$el_name, //название 'PROPERTY_VALUES'=>array( 'FILES'=>add_test_files(), //дополнительные файлы ) ); $c_element = new CIBlockElement; $ID = $c_element->Add($arNeededFields); if (intval($ID) > 0) echo $ID.": Задание ".$arNeededFields['NAME']." - ОК"; else echo $c_element->LAST_ERROR;
Спасибо. :)
ОтветитьУдалитьпожалуйста ;-)
УдалитьА как добавить файлы к уже имеющимся?
ОтветитьУдалитьесли честно, такое делать не приходилось. есть подозрение, что для этого надо знать список того, что уже лежит в свойстве.
Удалитьможно почитать например вот тут:
https://dev.1c-bitrix.ru/community/forums/forum6/topic8535/