Dublet
@Dublet
Пытаюсь программировать (не выходит)

Как добавить картинку к MORE_PHOTO?

Ситуация такова:
Есть ассортимент товаров из 904-ёх элементов,мне сказали, что необходимо к каждому прикрепить одну фотографию
Как вы понимаете, делать руками это очень больно.
Я не понимаю какой скрипт нужно написать, чтобы добавить ещё одну фотографию к этому свойству.
Всем заранее спасибо
  • Вопрос задан
  • 1194 просмотра
Решения вопроса 1
udjin123
@udjin123
PHP, Golang, React
В общем вот код добавление картинки к MORE_PHOTO не затирая старые, протестировал на bitrixlabs он рабочий.

\Bitrix\Main\Loader::includeModule('iblock');

$iBlockId = 28;
$file = CFile::MakeFileArray($_SERVER['DOCUMENT_ROOT'] . "/backs/doorman.jpg");
$result = CIblockElement::GetList([], ['IBLOCK_ID' => $iBlockId, 'INCLUDE_SUBSECTIONS' => 'Y'], false, false, ['ID']);
while ($element = $result->Fetch()) {
    $values = ['n0' => ['VALUE' => $file, 'DESCRIPTION' => '']];
    $result2 = CIBlockElement::GetProperty($iBlockId, $element['ID'], [], ['CODE' => 'MORE_PHOTO']);
    while ($photo = $result2->Fetch()) {
        $values[$photo['PROPERTY_VALUE_ID']] = ['VALUE' => [
            'name' => '',
            'type' => '',
            'tmp_name' => '',
            'error' => 4,
            'size' => 0,
            'description' => ''
        ], 'DESCRIPTION' => ''];
    }

    CIBlockElement::SetPropertyValuesEx($element['ID'], $iBlockId, ['MORE_PHOTO' => $values]);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@tgarl
$elementId=1; //ID элемента в который нужно добавить
$tmpFilePath=$_SERVER['DOCUMENT_ROOT']."/upload/picatest.jpg";
$arFile=array("VALUE" => \CFile::MakeFileArray($tmpFilePath),"DESCRIPTION"=>"");
\CIBlockElement::SetPropertyValueCode($elementId, 'MORE_PHOTO', $arFile);


таким обновлением он картинки не удаляет если были, а дописывает

если нужно несколько картинок к элементу
то собираем все в массив $arFile (пример без циклов и прочего)

$elementId=1; //ID элемента в который нужно добавить

$tmpFilePath=$_SERVER['DOCUMENT_ROOT']."/upload/picatest1.jpg";
$arFile[]=array("VALUE" => \CFile::MakeFileArray($tmpFilePath),"DESCRIPTION"=>"");

$tmpFilePath=$_SERVER['DOCUMENT_ROOT']."/upload/picatest2.jpg";
$arFile[]=array("VALUE" => \CFile::MakeFileArray($tmpFilePath),"DESCRIPTION"=>"");

$tmpFilePath=$_SERVER['DOCUMENT_ROOT']."/upload/picatest3.jpg";
$arFile[]=array("VALUE" => \CFile::MakeFileArray($tmpFilePath),"DESCRIPTION"=>"");


\CIBlockElement::SetPropertyValueCode($elementId, 'MORE_PHOTO', $arFile);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы