Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Программное создание элементов инфоблока

00 голосов
4
Здравствуйте! Мне необходимо программно создавать элементы фотогалереи. Для этого я использую следующий код:
Код
      $arIMAGE = $_FILES["IMAGE_ID"];
      $arIMAGE["MODULE_ID"] = "iblock";
      
      $fid = CFile::SaveFile($arIMAGE, "iblock");
      
      $PROP = array();
      $PROP[115] = $USER->GetLogin();
      $PROP[117] = 0;
      $PROP[118] = 0;
      $PROP[127] = 0;
      $PROP[113] = 'N';
      $PROP[114] = 'N';
      $PROP[148] = 'Y';
      $PROP[116] = date("d.m.Y");
      
      $el = new CIBlockElement;
      
      $arLoadImageArray = Array(
        "MODIFIED_BY"    => $USER->GetID(),
        "IBLOCK_SECTION_ID" => 294,
        "IBLOCK_ID"      => 29,
        "PROPERTY_VALUES"=> $PROP,
        "NAME"           => $_POST['picture_name'],
        "ACTIVE"         => "N",
        "PREVIEW_TEXT"   => "",
        "DETAIL_TEXT"    => "",
        "DETAIL_PICTURE" => CFile::MakeFileArray($fid)
      );
      
      $el->Add($arLoadImageArray);

Элемент создается нормально, а вот с детальной картинкой проблема. Она то загружается, то нет. При чем от изображения это не зависит, потому что одно и то же может загрузится, а может и не загрузится..0_о

Подскажите пожалуйста, от чего это может зависеть.
спросил 21 Янв, 14 от LAYS (180 баллов)

4 Ответы

00 голосов
Неужели ни у кого подобного не было?
ответил 13 Май, 14 от LAYS (180 баллов)
00 голосов
Вот сколько помню подобные темы, всегда задаюсь вопросом, откуда берутся все эти примеры, в которых перед загрузкой файлов зачем-то сначала делается SaveFile()?

В документации же показан пример с локальной картинкой:
Код
...
"DETAIL_PICTURE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/image.gif")
...

не сложно же посмотреть и на назначение самой CFile::MakeFileArray():
Цитата
Функция формирует массив описывающий файл. Структура массива аналогична структуре массива $_FILES[имя] (или $HTTP_POST_FILES[имя]).

Т.е. поле DETAIL_PICTURE принимает структуру $_FILES без дополнительных манипуляций.


Попробуйте убрать это:

$arIMAGE = $_FILES["IMAGE_ID"];
$arIMAGE["MODULE_ID"] = "iblock";

$fid = CFile::SaveFile($arIMAGE, "iblock");


и использовать просто $_FILES["IMAGE_ID"]:

...
"DETAIL_PICTURE" => $_FILES["IMAGE_ID"]
...
ответил 09 Сен, 14 от Delp (7,220 баллов)
00 голосов
Сергей, спасибо за ответ!

Мануалы я разумеется читал, и назначение метода CFile::MakeFileArray()знаю.
Я показал сдесь один из нескольких опробованных мною способов, найденный где-то в сети. Я пробовал и непосредственную передачу массива $_FILES['IMAGE_ID'] в DETAIL_PICTURE.
Результат всех перепробованных манипуляций ровно один и тот же - изображение то загружается нормально, то не загружается совсем. Сколько я не отлаживал, даже не смог понять, от чего это может зависеть, ведь условия АБСОЛЮТНО одинаковые.
ответил 15 Янв, 15 от LAYS (180 баллов)
00 голосов
Судя по приведенному вами коду это зависит от
1. Передачи файла в POST запросе.
2. Создания временного файла для хранения картинки.
3. ПереЗаписи файла на постоянное место хранения.
4. Занесения инфы о файле в таблицу b_file.
4 Пункт опускаем пока, так как Вам нужно передавать массив, описывающий файл.
ответил 01 Май, 15 от Almarea (3,760 баллов)

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