UPD: прошло немало времени с написания статьи и я решил обновить и оптимизировать этот скрипт, раз он пользуется популярностью.
Как скачать файлы с другого хостинга и привязать их к элементам инфоблока? Об этом пойдет речь ниже.
Пример подготовленного массива для скачивания и заливки изображений с другого сервера. Сразу скажу, делал чисто для себя, поэтому проверок на ошибки тут нет и код не совершенен.
В качестве ключа можно использовать любой параметр по которому вы хотите сопостовлять товары и картинки, в моем случае это будет XML_ID элемента. Значение - это соответственно путь до нужного файла.
$arrImg = array( 16 => "http://www.example.su/one.gif", 10 => "http://www.example.su/two.jpg", 19 => "http://www.example.su/three.png", );
Делаем выборку делаем сразу всех товаров из нашего массива, чтобы не дергать их по одному, в качетсве фильтра используем массив наших ключей из массива соотвествий (используем функцию array_keys). Если у вас соответствие основывается на ID-элемента, следующий блок с получением информации по элементам вы можете пропустить, т.к. он нужен исключительно для получения ID элементов.
$arElems = array(); $resItemsList = CIBlockElement::GetList( array(), Array("IBLOCK_ID"=>3, "XML_ID" => array_keys($arrImg)), false, false, array("ID", "XML_ID", "IBLOCK_ID") ); while($obItemsList = $resItemsList->Fetch()) { $arElems[$obItemsList["XML_ID"]] = $obItemsList["ID"]; // соответствие XML_ID => ID }
Далее перебираем массив соответствия и сохраняем наши элементы
$el = new CIBlockElement; foreach($arrImg as $keyImg => $urlImg) { $arLoadProductArray = Array( "PREVIEW_PICTURE" => CFile::MakeFileArray($urlImg), ); $el->Update($arElems[$keyImg], $arLoadProductArray); // сохраняемся // для сохранения свойств типа файл //CIBlockElement::SetPropertyValues( // $arItem["ID"], // $arItem["IBLOCK_ID"], // $arFile, // "MORE_PHOTO" //); }
Это всё. Далее для удобства весь код целиком
$arrImg = array( 16 => "http://www.example.su/one.gif", 10 => "http://www.example.su/two.jpg", 19 => "http://www.example.su/three.png", ); $arElems = array(); $resItemsList = CIBlockElement::GetList( array(), Array("IBLOCK_ID"=>3, "XML_ID" => array_keys($arrImg)), false, false, array("ID", "XML_ID", "IBLOCK_ID") ); while($obItemsList = $resItemsList->Fetch()) { $arElems[$obItemsList["XML_ID"]] = $obItemsList["ID"]; // соответствие XML_ID => ID } $el = new CIBlockElement; foreach($arrImg as $keyImg => $urlImg) { $arLoadProductArray = Array( "PREVIEW_PICTURE" => CFile::MakeFileArray($urlImg), ); $el->Update($arElems[$keyImg], $arLoadProductArray); // сохраняемся // для сохранения свойств типа файл //CIBlockElement::SetPropertyValues( // $arItem["ID"], // $arItem["IBLOCK_ID"], // $arFile, // "MORE_PHOTO" //); }
Дополнительно можете посмотреть пример простого сохранения файла в Битрикс