Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С Битрикс
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 300
1

Импорт картинок

23.07.2018, 13:29. Просмотров 927. Ответов 10
Метки нет (Все метки)

Пишу модуль, импортирую все текстовые поля, но не могу понять, как импортировать картинки- есть у кого алгоритм примерный?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public function importIblockContacts($id) {
        $files = __DIR__."/example_csv/informationIblock.csv";
        $csvFile = new CCSVData('R', true);
        $csvFile->LoadFile($files);
        $csvFile->SetDelimiter('|');
        while ($arRes = $csvFile->Fetch()) {
            $arImport[] = $arRes;
        }
        CModule::IncludeModule("iblock");
        foreach ($arImport as $key=>$el) { 
            $newElement = new CIBlockElement;
            $PROP = array();
        $PROP['LOGOTIP'] = $el[9]; //картинка, как грузить?  приходит путь до картинки, с донора
        $PROP['SMALL'] = $el[10];  просто текст
        $PROP['SHOW_LOGOTIP'] = $el[11]; показывать ли логотип
 
            $arFields = Array(
                "ACTIVE" => 'Y',
                "IBLOCK_ID" => $id,
                "NAME" => $el[0],
                "PROPERTY_VALUES"=> $PROP,
                "PREVIEW_TEXT" => $el[2],
                "PREVIEW_TEXT_TYPE" => $el[3], 
                "DETAIL_TEXT" => $el[5],
                "DETAIL_TEXT_TYPE" =>$el[6],
                "CODE" =>$el[7],        
                "SORT" =>$el[8],
            );
            if($PRODUCT_ID = $newElement->Add($arFields)){
               // echo $key.'.New ID: '.$PRODUCT_ID.'(NAME = '.$el[0].')<br>';
            }
            else {
               // echo $arOptions["contact_informationIblockID"]. ' '.$key.'.Error: '.$newElement->LAST_ERROR.'<br>';
            }
        }
    }
есть например функция, как мне в ней картинку импортировать?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2018, 13:29
Ответы с готовыми решениями:

Импорт из 1С в bitrix через csv, импорт пути изображения
Добрый день Уважаемые, Уже всю голову сломал себе пытаясь импортировать csv...

Импорт CSV
Нужно сделать форму импорта данных из *.CSV в инфоблок пользователем со...

Импорт csv в mysql
Добрый день. Можно ли реализовать выгрузку csv файла в БД bitrix'а? Не в...

Импорт из XML в инфоблок (в БД)
Здравствуйте. mail(&quot;gmail@gmail.com&quot;, &quot;Крон запущен&quot;, &quot;Крон запущен&quot;);...

Импорт товаров на сайт
Здравствуйте, проблема вот в чем. Есть API сервис через который мы получаем CSV...

10
voral
917 / 614 / 135
Регистрация: 16.03.2008
Сообщений: 2,920
24.07.2018, 10:43 2
Лучший ответ Сообщение было отмечено Владислав-2012 как решение

Решение

Вроде должно сработать. Только путь проверьте чтоб был правильный (лучше полный путь)
PHP/HTML
1
$PROP['LOGOTIP'] = CFile::MakeFileArray($el[9]);
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 300
31.07.2018, 11:47  [ТС] 3
Сработало, но не срабатывает поле типа список. Мне как то нужно при записи в элемент узнать id свойства и id значение. А в csv храниться значение а не айди. Как мне записывать правильно? пример в принципе такой же как и выше
PHP
1
  $PROP['SHOW_LOGOTIP'] = $el[11]; показывать ли логотип
Вот эта строчка интересует
0
voral
917 / 614 / 135
Регистрация: 16.03.2008
Сообщений: 2,920
31.07.2018, 11:51 4
Перед началом импорта считать все значения из поля список (или руками в скрипте массив заполнить). Ключ: значение (или хеш значения поля), значение - ИД поля. При вставке просто используете этот массив как "прокси"....
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 300
31.07.2018, 12:07  [ТС] 5
То есть при импорте мне нужно гетлистом получить значения свойства забить временный массив свойства, а как дальше мне сравнивать кириллицу?
0
voral
917 / 614 / 135
Регистрация: 16.03.2008
Сообщений: 2,920
31.07.2018, 12:54 6
Не обязательно сравнивать кириллицу. И вообще ни чего сравнивать не надо. Например так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$rsEnums = CIBlockPropertyEnum::GetList(
   Array("ID"=>"ASC"), 
   Array("IBLOCK_ID"=>$IBLOCK_ID, "CODE"=>"COLORS")
);
$arProxy = array();
while($arField = $rsEnums->GetNext()) {
   $arProxy[md5($arField['VALUE'])] = $arField['ID'];
}
 
foreach ($arImport as $key=>$el) { 
   $hash = md5($el[99]);// Предположил что нужное значение в $el[99]
   if (!isset($arProxy[$hash])) { 
// обрабатываем ситуацию когда такого значения нет, 
// если надо пропускать в этом случае то строку ниже убрать в  блок else
   }
   $PROP['MY_PROP'] = $arProxy[$hash];
}
кодировка, естественно, должна быть одинаковая
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 300
31.07.2018, 13:34  [ТС] 7
я не понимаю чего то, мы присваиваем полю хеш?

Добавлено через 5 минут
В всяком случае он не сработал, и не изменилось ничего((

Добавлено через 1 минуту
то есть у меня есть id инфоблока, есть csv файл, в котором в поле храниться значение "Да", csv импортировал встроенным экспорником битрикса.

Добавлено через 20 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public function importIblockLogosDesc($id) {
        $arImport = $this->fileImport('logo_descIblock');
        CModule::IncludeModule("iblock");
 
        foreach ($arImport as $key=>$el) { 
 
            $newElement = new CIBlockElement;
            $PROP = array();
            $PROP['LOGOTIP'] = CFile::MakeFileArray($el[9]);
            $PROP['SMALL'] = $el[10];
            //$PROP['SHOW_LOGOTIP_VALUE'] = $el[11];
        
 
                
    $rsEnums = CIBlockPropertyEnum::GetList(
       Array("ID"=>"ASC"), 
       Array("IBLOCK_ID"=>$id, "CODE"=>"SHOW_LOGOTIP")
    );
    $arProxy = array();
    while($arField = $rsEnums->GetNext()) {
       $arProxy[md5($arField['VALUE'])] = $arField['ID'];
    }
    foreach ($arImport as $key=>$el) { 
       $hash = md5($el[11]);// Предположил что нужное значение в $el[99]
       if (!isset($arProxy[$hash])) { 
    // обрабатываем ситуацию когда такого значения нет, 
    // если надо пропускать в этом случае то строку ниже убрать в  блок else
       }
       $PROP['SHOW_LOGOTIP'] = $arProxy[$hash];
    }
 
 
            $arFields = Array(
                "ACTIVE" => 'Y',
                "IBLOCK_ID" => $id,
                "NAME" => $el[0],
                "PREVIEW_PICTURE" =>CFile::MakeFileArray($el[1]), //картинка, как грузить?
                "PREVIEW_TEXT_TYPE" => $el[3], 
                "DETAIL_TEXT_TYPE" =>$el[6],
                "SORT" =>$el[8],
                "PROPERTY_VALUES"=> $PROP,
            );
 
            if($PRODUCT_ID = $newElement->Add($arFields)){
                //echo $key.'.New ID: '.$PRODUCT_ID.'(NAME = '.$el[0].')<br>'; 
            } else {
                //echo $arOptions["logoAndDescIblockID "]. ' '.$key.'.Error: '.$newElement->LAST_ERROR.'<br>';
            }
            COption::SetOptionInt($this->MODULE_ID, "LogosDescElementID", $PRODUCT_ID);
        }
    }
0
voral
917 / 614 / 135
Регистрация: 16.03.2008
Сообщений: 2,920
31.07.2018, 17:10 8
Зачем вам CIBlockPropertyEnum::GetList гонять внутри цикла? можно же вынести
Я код не проверял - посмотрите все ли то попадает куда нужно.

Добавлено через 2 минуты
Проверьте какой массив образуется $arProxy что выдает $arProxy[$hash]

я дал срец для развития, его не проверял.
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 300
31.07.2018, 19:21  [ТС] 9
я просто не понимаю как это может сработать
0
voral
917 / 614 / 135
Регистрация: 16.03.2008
Сообщений: 2,920
01.08.2018, 07:14 10
а чего непонятно го то? Ну уберите md5 и ставьте просто значение - php пережует.

Есть у вас список: 1 - Яблоко, 2 - Груша. Загружаете его в массив
PHP
1
2
3
4
5
6
7
$ar['яблоко'] = 1;
$ar['груша'] = 2;
 
//читаете строку из файла в массив, в т.ч. у вас получается
$row[99] = 'яблоко';
// его надо сохранить
$PROP['FRUIT'] = $ar[$row[99]] = $ar['яблоко'] = 1;
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 300
01.08.2018, 13:42  [ТС] 11
PHP
1
2
3
4
5
6
7
$VALUES = array();
                $res = CIBlockElement::GetProperty($id, $lastID, "sort", "asc", array("CODE" => "PHONE"));
                while ($ob = $res->GetNext()) {
                    $VALUES[] =  $ob['VALUE'];
                }  
                $VALUES[] = $el[14];
                CIBlockElement::SetPropertyValuesEx($lastID, $id,array("PHONE" => $VALUES));
Реализовал через api. Спасибо за помощь. Еще вопрос тогда, urlrewrite, с ним нет никаких api для записи\удаления. Реплейсом не очень надежно заниматься этим, но необходимо обновление этого файла при создании инфоблока, как можно это обойти?
0
01.08.2018, 13:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2018, 13:42

Как сделать импорт/экспорт?
Всем привет. Я новачок в битрикс и у меня возник вопрос на который гугл...

Импорт товаров в интернет-магазин на 1С.Битрикс
Товарищ попросил помочь с сайтом. Есть интернет-магазин на 1С.Битрикс, нужно в...

Импорт из 1с в битрикс с другой структурой каталогов
Добрый день и вечер! В 1С структура: Компрессоры -Компрессоры бустеры...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru