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"
//);
}
Дополнительно можете посмотреть пример простого сохранения файла в Битрикс