Перейти к содержимому


Импорт изображений из url при импорте из csv


Сообщений в теме: 13

#1 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 12 Апрель 2016 - 16:54

Добрый день, коллеги пытаюсь воспользоватся кодом опубликованным тут.
Но хочу чтобы картинка скачивалась по url из файла csv при импорте.
Планирую так, в фале csv через разделитель будут указаны url картинок.
В вычислении с условием импорт в таблице разобрать url и так же каки в этой теме присвоить полю типа Изображение скаченный файл.
Вопрос, будет ли это работать ? Доступны ли в вычислении импортируемые поля ?
т.к у меня может быть список картинок как правильно выполнить присвоение ?

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 13 Апрель 2016 - 09:35

Цитата

Вопрос, будет ли это работать ? Доступны ли в вычислении импортируемые поля ?

Почему собственно нет? Файл csv тут не причем, вычисление в любом случае будет работать с полями таблицы уже после импорта строки. Т.е. у вас должно быть 2 поля: в первое, с типом текст, импортируются url из файла стандартным образом, во втором, с типом изображение, вычисление добавляет картинки.

#3 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 13 Апрель 2016 - 09:54

Спасибо за ответ буду пробовать.
Мне еще не очень понятно как быть со списком картинок, насколько я понял, это то же самое поле с типом изображение.
Можете привести код дать пример кода как присвоить полю несколько картинок или я что то не так понял про несколько изображений в одном поле ?

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 13 Апрель 2016 - 10:32

Цитата

Мне еще не очень понятно как быть со списком картинок, насколько я понял, это то же самое поле с типом изображение

Да, в поле с типом изображение может быть несколько картинок.

Цитата

Можете привести код дать пример кода как присвоить полю несколько картинок

Тот же самый код что в примере, только с циклом по нескольким ссылкам.

#5 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 14 Апрель 2016 - 10:18

У меня несколько изменилась постановка задачи. Мне нужно изображения перед импортом обработать. Я планирую что у меня в файле csv будут имена файлов, сами файлы я хочу сложить на сервер где установлено приложение. Как правильно все это сделать что в итоге присвоить в поле изображение ?

Сообщение отредактировал alexols: 14 Апрель 2016 - 10:18


#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 14 Апрель 2016 - 10:23

Так ничего по сути не меняется, просто вместо скачивания файлов по url будет идти копирование файлов из папки на сервере. Это даже проще.

#7 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 14 Апрель 2016 - 10:32

Правильно я понял что мне нужен такой код ?

$nameFile=Путь к моему файлу на сервере.
//Определяем путь к загружаему файлу в КБ
$file_path = get_file_path(491, $line['ID'], $nameFile);
//Создаем необходимую структуру директорий
create_data_file_dirs(491, $line['ID'], $nameFile);

if (!$line['Фото товара']) $line['Фото товара']=$nameFile;
else $line['Фото товара']=$line['Фото товара']."\r\n".$nameFile;
// Формируем предпросмотр изображения в папке cache
$cur_line = $line;
$cur_table = $table;
$cur_field = get_table_fields($table);
$cur_field = $cur_field[491];
$t = form_display_type($cur_field, $cur_line);

Естественно с учетом моих таблиц и названий полей.
-------------------------------------
И уточните пожалуйста что означает // Формируем предпросмотр изображения в папке cache
не очень понимаю что делает код пол этим комментариям, нужен ли он мне ?

#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 14 Апрель 2016 - 10:56

Цитата

Правильно я понял что мне нужен такой код ?

Нет. Во-первых, в "$nameFile=Путь к моему файлу на сервере" должен быть не путь к файлу, а его имя, которое вы достаете из поля, в которое собственно происходит импорт из csv. Т.е. должно быть "$nameFile=$line['Поле с именем файла']". Во-вторых, не вижу в коде команды копирования файла из вашей папки на сервере в программу КБ. Вы заполняете переменную $file_path, которая как раз и нужна для этого (чтобы знать, куда собственно копировать файл), но никак ее не используете потом. Должно быть copy(Путь к файлу на сервере, $file_path) после создания директории.

Цитата

И уточните пожалуйста что означает // Формируем предпросмотр изображения в папке cache
не очень понимаю что делает код пол этим комментариям, нужен ли он мне ?

Я сам не очень понимаю, зачем это нужно, видимо автор решил так форсировать производительность, или что-то недопонимает. Этот блок вообще необязателен, его можно выкинуть.

#9 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 18 Апрель 2016 - 20:10

Просмотр сообщенияCbCoder (14 Апрель 2016 - 10:56) писал:

Я сам не очень понимаю, зачем это нужно, видимо автор решил так форсировать производительность, или что-то недопонимает. Этот блок вообще необязателен, его можно выкинуть.
Автор как раз таки понимает), суть в том что изображения кодом выше качались в подтаблице и все ок - фото реально было в поле. Вот только превью этого фото появлялось только после обновления страницы. Не знаю как в 2.5 это как-то доработано или нет, но ранее года 2 назад эта проблема была и уважаемый, Николай Кошмин, предоставил подобное решение.

#10 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 18 Апрель 2016 - 23:27

Приветствую написал такой код

$images=$line['ИмяФайлаКартинки'];
$images_array=explode(";", $images);
$image_first=$images_array[0];

$file_path = get_file_path(13180, $line['ID'], $image_first);
//Создаем необходимую структуру директорий
create_data_file_dirs(13180, $line['ID'], $image_first);
//Копируем файл
copy('picture/picture/'.$image_first,$file_path);
// Присваиваем полю с типом изображение
$line['Фото главная']=$image_first;

В поле таблицы после импорта вижу
765225819_0.jpg (файл не существует)
Что сделал не так ? что можно проверить ?
Очень похоже на то что не копируется файл, сходил в директорию /http/files/f3/97 там пусто.

Сообщение отредактировал alexols: 18 Апрель 2016 - 23:34


#11 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 19 Апрель 2016 - 06:48

разобрался, не работал функция copy не верно задал первый параметр

#12 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 19 Апрель 2016 - 10:34

Подскажите пожалуйста, у меня есть скрипт который качает картинки эти картинки я собственно и прикручиваю в КБ с помощью кода выше.
Теперь мне необходимо запускать этот скрипт по расписанию, вроде как понимаю что нужно юзать cron и в доке про это что то есть.
Как настроить запуск моего скрипта в cron ?
Если есть про это в доке дайте ссылку, что то я не найду.

#13 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 20 Апрель 2016 - 16:38

Просмотр сообщенияalexols (19 Апрель 2016 - 10:34) писал:

Подскажите пожалуйста, у меня есть скрипт который качает картинки эти картинки я собственно и прикручиваю в КБ с помощью кода выше.
Теперь мне необходимо запускать этот скрипт по расписанию, вроде как понимаю что нужно юзать cron и в доке про это что то есть.
Как настроить запуск моего скрипта в cron ?
Если есть про это в доке дайте ссылку, что то я не найду.
В кроне нет массива $line. Но вам никто не мешает делать выборку записей из таблицы по какому-то условию и для каждой из записи - выполнять ваш скрипт

#14 alexols

    Активный участник

  • Пользователи
  • PipPipPip
  • 48 сообщений

Отправлено 20 Апрель 2016 - 17:36

Спасибо я уже разобрался. У меня обмен между скриптом и КБ идет через csv файл





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных