Тэг ‘импорт’

Импорт csv в virtuemart - Simple CSV (часть 2)

Не так давно публиковал заметку о реализации импорта csv в virtuemart

Когда потребовалось повторить установку “мода” Simple CSV - пока читал форум, забыл зачем пошел. :) На десяти страницах форума слишком много “воды” и повторяющихся вопросов. Решил собрать краткий ман-faq по мод-хаку  в одном месте. Может кому-нибудь окажется полезным.

Хак для версии virtuemart 1.0.*
Для более новых версий - см. CSVImproved http://joomlaforum.ru/index.php/topic,42648.msg407103.html#msg407103

http://joomlaforum.ru/index.php/topic,8340.msg87750.html#msg87750 - тут последняя (на дату написания поста) версия Simple CSV. Попутно стоит скачать примеры (на первой странице ветки), и учесть, что в файле параметров параметры надо называть не “Иглы;Размер иглы в СИ”, а просто “Размер иглы в СИ” - возможна ошибка при импорте. В секции товаров (!) в первой строке (заголовок) параметр должен называться  “Иглы;Размер иглы в СИ”.

В файле ps_simple_csv_aliases.php соответствия между заголовками импортируемого файла и полями в базе. Дополнительные поля могут не загружаться, так как в базу пишет функция Virtuemart’a - подправлять следует её.

Модифицировал галочку “проверять товары” (при включенной галочке - все товары, отсутствующие в загрузке “распубликовываются”) - сделал распубликование всех товаров перед загрузкой - запрос из нескольких тысяч in (,,,) почему-то не срабатывал..

Импорт атрибутов
В ps_simple_csv_aliases.php строчки
‘Атрибут’ => ‘attribute’,
‘Атрибут определенный нами’ => custom_attribute’,
на самом деле должны быть
‘Атрибут’ => ‘product_advanced_attribute’,
‘Атрибут определенный нами’ => ‘product_custom_attribute’,
Теперь буду мучать картинки =)

А как залить товар в несколько категорий?
Указать путь к категориям через запятую, или точку с запятой или палку. Смотря какой у вас разделитель данных. Стоит быть внимательным - добавляйте категории без пробелов - возможно “дублирование”/создание “лишних” категорий.

Категории, содержащие запятую (точку с запятой или вертикальную черту) могут грузиться как несколько категорий. Для того, чтобы избежать подобного “разделения одной категории”, в строке ~805 файла ps_simple_csv.php следует убрать или закомментировать ненужный разделитель..
if( !is_array($paths) ) $paths = explode(’,', $paths);

  Разделяем превьюшки и основные изображения по разным папкам: создаем нужный каталог (например resized) для и в csv пишем “resized/image1.jpg” и т.д.

Разные цены, в зависимости от количества товара:
А можно ли сделать чтобы отображалось 3 цены товара? При этом магазин у меня работает как каталог, т.е указать например, что при покупке 100 игл цена 600р, а при покупке 500 игл цена 580р, а при покупке 1000 игл цена 550р. Как это мне можно сделать думаю, что это можэно сделать через “Параметры товара”, я прав???
В версии 4 и ниже - если нужны именно цены, то сделать это можно через цены, а если просто для информаци, то через параметры можно. Через цены пока можно лишь разом загружать цены для разных групп, для возможности загружать цены и для разного количества товара - проверить в файле ps_simple_csv_aliases.php строку №123 заменить на:

'/Цена для группы "(.+?)"(?:(?:.*?)(\d+)(?:.*?)(\d+))?/' =>
'product_prices|shopper_group_name|price_quantity_start|price_quantity_end',

Для версии бета-5 добавлена возможность добавлять “сложные цены” в следующем формате

Цена для группы “<название группы покупателей, сначала это обычно -default->”[[что угодно]<число от>[что угодно]<число до>]

Правильно: Цена для группы “-default-” количество от 3 до 7
Неправильно: Цена для группы “-default-” количество от 3
Правильно: Цена для группы “-default-” 3 - 7
Правильно: Цена для группы “-default-”, 3 7
Правильно: Цена для группы “-default-
Если до много - пишем что-то вроде 3-99999 - http://joomlaforum.ru/index.php/topic,8340.msg89584.html#msg89584 - тут с примером разбора.

При загрузке двух колонок  (артикул, цена) - т.е. выгрузка используется только для обновления цен на сайте, следует подправить 883 строку файла на

if( $csv_data['manufacturer_id'] ) {

Fatal error: Allowed memory size of … bytes exhausted (tried to allocate … bytes) in - ошибка возникает при нехватке памяти скрипту. Следует уменьшать либо количество товаров в файле, либо по возможности убрать “лишнее” - описания, которые не меняются и подобное.

При длительной загрузке прайса, возможно, поможет

define( 'RG_EMULATION', 0 ); в файле globals.php

Несколько изображений в virtuemart - http://forum.virtuemart.net/index.php?topic=18473

Настройка разделителей по умолчанию - в product.simple_csv_upload.php
<input type="radio" name="csv_delimiter" checked="checked" value=";" />

Замеченные глюки с ценой:
- указание цены с пробелами;
- в меню “Информация о магазине” не выставлена валюта “валюта = рубль” - может повлиять на импорт цен;
- добавить в файл импорта поле product_currency с содержимым руб. (видимо, альтернатива предыдущему решению)

Сохраняем связанные товары  http://joomlaforum.ru/index.php/topic,8340.msg170587.html#msg170587

        // Присваиваем значения выборке из базы
        foreach( $csv_data as $key => $value ) {
          //if($db_data[$key]) $db_data[$key] = $value;
          $db_data[$key] = $value;
        }
		/*##my Додаю для того, аби супутні товари не затирались. Старт ##200802281852*/
		$q  = "SELECT related_products FROM #__{vm}_product_relations ";
		$q .= " WHERE product_id='".$db_data['product_id']."'";
		$db->query($q);
		if( $db->num_rows() ) {$db_data_related_products[] = $db->loadResult();}
		$db_data["related_products"]=$db_data_related_products;
		/* Кінець ##200802281852 */

Если у Вас возникли проблемы с установкой Simple CSV и вы их решили (или не решили) - отписывайтесь в комментариях или на форуме. При появлении новой информации пост по возможности (и желанию) буду обновлять.

Опубликовано Сентябрь 25, 2009 | автор: levik  |  Нет комментариев »

Импорт csv в virtuemart для больших файлов

Virtuemart + joomla - неплохой и “бесплатный” инструмент для организации интернет-магазина. Для синхронизации, например с 1с (что требуется довольно часто), в virtuemart используется инструмент импорт-экспорт через CSV. Все бы ничего - после определенной настройки данные импортируются, но при солидных объемах магазина - несколько тысяч товаров в csv-файле, даже без описаний, скрипт импорта выполняется несколько минут. Площадки виртуального хостинга же, частенько, имеют ограничение на это самое время выполнения скрипта. Вот и получаем

Попытки прописать в .htaccess  php_value max_execution_time 600 (увеличить максимально разрешенное время скрипта до 600 секунд) не всегда приводят к желаемому результату, потому как довольно часто такая возможность блокируется хостером. Доступ к php.ini предоставляется далеко не всеми хостерами. Вопросы о возможности увеличения этого времени “в частном” или “в общем” порядке, в лучшем случае обычно заканчиваются предложением приобрести VPS..

Как вариант решения проблемы импорта больших файлов - разбиение CSV-файла на части, и загрузка каждой части в отдельности. Естественно, не забываем про служебную информацию (обычно - первая строка csv-файла)Размер частей подбирается опытным путем :) Однако, мягко говоря, вариант далеко не идеальный.

Поиски, как ни странно, показали, что такого рода проблемы не у меня одного, причем возникают они снова и снова. :) И, как ни странно, на многих форумах этот вопрос оставлен без ответа. При том, что решение, довольно изящное, разработано несколько лет назад пользователем tug на joomlaforum.ru

Модификация для нормальной загрузки через CSV - Simple CSV Import

Нормальная заливка это …:

* возможность заливать любые данные через CSV, т.е. товары, типы, параметры, категории, производителей, налоги, хуёги и пр.
* возможность прямо в csv указывать поля, которые нужно обрабатывать.
* когда в админке Вам нужно только указать файл и нажать “Upload”.
* возможность кастомизировать заливку и добавлять новые модули и не только для VirtueMart.

Особое внимание обратил на “только указать файл и нажать…”
Тех, кто торопится “в бой” - “поставить и забыть” - хочу предупредить, что на третьей странице лежит пятая бета-версия. Ставить лучше её. И, несмотря, на многостраничность темы, все же рекомендую ознакомиться.
Расписывать все прелести CSV-импорта от tug-а не буду. Стоит отметить, однако, что от старого доброго экспорта-импорта через csv отказываться не обязательно, они вполне могут существовать параллельно - своеобразный путь к отступлению…

upd.  Полезная информация по Simple CSV - краткая “выжимка” из 10 страниц топика на форуме. Если что упустил - поправляйте.

Опубликовано Май 13, 2009 | автор: levik  |  Комментарии (2) »

easypopulate или импорт-экспорт в OsCommerce

EasyPopulate - хто этО?

EasyPopulate - плагин (или файл-модуль.. как угодно) для OsCommerce, который позволяет экспортировать товары из интернет-магазинов на базе OScommerce (например, в csv-формате), редактировать их (например, в Excel) и импортировать обратно в интернет-магазин. Кроме того, файл с информацией о товарах можно автоматически генерировать (часто удобно делать напрямую обработкой-выгрузкой из 1С).

Сомнений не возникает, что  EasyPopulate - штука полезная. Если сборка магазина OsCommerce более-менее солидная, то скорее всего, наличие сей “фичи” уже имеется. Если же нет - можно установить таковую и самостоятельно.

Как начать работу с Easypopulate

Проще всего сделать экспорт товаров (ищем в меню админки где-то в каталоге) из интернет-магазина и открыть получившийся файл любым редактором csv (скорее всего, это будет Excel). Если файл с расширением .txt, то придется пройти небольшую процедуру определения формата файла - табуляторы, строки, форматы ячеек.. Проблем возникнуть не должно.

Структура файла не слишком замысловата - первая строка, как и положено “заголовочная”. Значение большинства полей интуитивно понятно (v_products_id, v_products_model,v_products_image…). Для полной уверенности можно ознакомиться с форматом данных EasyPopulate. В последующих строках идут значения полей для каждого товара. Следует отметить, что при необходимости товар и категории будут добавлены автоматически. Глубина вложенности категорий ограничена шестью, но на практике этого вполне хватает.

Внутри easypopulate или “ручками”

При наличии некоторых знаний php беглый просмотр файла easypopulate.php прояснит некоторые детали,  изначально скрытые от глаз  пользователя. Документацию ведь читать некогда :) Да.. ещё, следует обратить внимание на версию файла… И не торопиться обновлять до последней - скорее всего в используемой версии/сборке магазина файл был отредактирован и довольно сильно отличается от оригинального (такова уж особенность OsCommerce) …

Встречался с версиями, у которых “всё в одном” - html (+php, куда ж без него) код, импорт и экспорт в одном файле. Первая половина отвечает за экспорт, (блок if download…) , потом - импорт в Oscommerce ($localfile or is_uploaded_file), импорт с разбиением на части (if (is_uploaded_file($usrfl) && $split==1) …) - что-то похожее реализовано в импорте для virtuemart (joomla) , дальше - вывод HTML (форма для импорта), чуть ниже - функции обработки.

Основная обработка производится функциями ep_create_filelayout() и walk() (импорт)

Импорт в Oscommerce дополнительных полей

Добавить в файл  импорта дополнительные поля (не забыть заголовки) и обработать их в easypopulate (в функции walk). В общем-то всё :)

Импорт в Oscommerce товаров и атрибутов в одном файле

Вообще, в файле easypopulate реализован импорт-экспорт атрибутов отдельным файлом (для экспорта выбрать файл экспорта - атрибуты товаров). Т.е. товары загружаем файлом товаров, а атрибуты - файлом атрибутов. И экспорт реализован слегка.. скажем так неудобно - в результате много “пустых” данных (а-ля представляем граф матрицей или почти  таблица пифагора - на пересечениях строки и столбца, если для товара имеется атрибут, то в графе “Цена” указывается значение разницы от основной. И независимо от того, есть атрибут или нет - его id и значение атрибута)

v_attribute_options_id_1 v_attribute_options_name_1_4 v_attribute_values_id_1_1 v_attribute_values_price_1_1 v_attribute_values_name_1_1_4 v_attribute_values_id_1_2 (… и тд для всех значений атрибута _1, потом _2)

Строчки присутствуют для всех товаров, столбцы - для всех атрибутов и значений атрибутов*3

Конечно, это не всегда удобно - например вариант экспорта атрибутов, когда в магазине ~6 тыс. товаров и НЕКОТОРЫЕ товары имеют один атрибут на vps генерировался несколько минут и весил в итоге 1.5 Мб. Импорт такого файла - тоже процедура довольно затратная.. :)

Как вариант - импорт в Oscommerce товаров и атрибутов одним файлом - добавляем столбец (к примеру, v_my_attribute_1) и помещаем туда значения (или предварительно сформированные ID, соответствующие внутренним ID магазина) и обрабатываем в функции walk.

Если предусмотреть автоматическое создание отсутствовавших ранее атрибутов и обработку для исключения дублирования (из-за пробелов, больших букв и тд.. можно как при импорте данных, так и на этапе формирования выгрузки.. или ещё раньше - “правильное” хранение данных в основной базе), то такой вариант вполне имеет право на сущесвование.

Приходилось сталкиваться с импортом OsCommerce? Нашли ошибку? Есть что добавить?  - Добро пожаловать в комментарии.

Опубликовано Апрель 17, 2008 | автор: levik  |  Нет комментариев »

easypopulate - описание формата данных (Oscommerce)

Easypopulate используется для экспорта-импорта данных (csv файлы - открываются в Excel) в магазинах на базе OScommerce. Краткое описание формата данных и некоторая полезная информация собрана в таблице ниже. Поля отмеченные звездочкой являются обязательными для заполнения. Остальные при необходимости можно оставлять пустыми.

Заголовок Описание формата EasyPopulate
v_products_id ID товара (из базы в магазине). Для новых товаров ставим 0 (ноль)
v_products_model* Код товара (артикул)
v_products_image Адрес основного изображения товара (относительно каталога images/). Файлы предварительно закачиваются по FTP (или в админке) Отображается как в листинге товаров, так и в popup изображении
v_products_image_med Основная картинка товара (при просмотре описания товара).
v_products_image_lrg Основная картинка товара (pop-up).
v_products_image_sm_1
v_products_image_xl_1
v_products_image_sm_2
v_products_image_xl_2
v_products_image_sm_3
v_products_image_xl_3
v_products_image_sm_4
v_products_image_xl_4
v_products_image_sm_5
v_products_image_xl_5
v_products_image_sm_6
v_products_image_xl_6
v_products_name_1* Название товара (максимальная длина - не больше 255 символов - см. длину поля products_name).
v_products_description_1 Описание товара (разрешается использовать HTML тэги)
v_products_info_1 Краткая информация о товаре.
v_products_url_1 Внешняя ссылка на товар(сайт производителя и тд.; указывается без http://)
v_products_head_title_tag_1 HTML-тэг Meta Title (заголовок) для страницы товара.
v_products_head_desc_tag_1 HTML-тэг Meta Description (описание) тэг для страницы товара.
v_products_head_keywords_tag_1 HTML-тэг Meta Keywords (ключевые слова) для страницы товара.
v_products_price* Цена товара в валюте по умолчанию (см. Админка -> Локализация -> Валюты). Разделитель дробной части - ТОЧКА!
v_products_weight Вес товара в килограммах (используется для расчета стоимости доставки). Если не используется - пропускаем.
v_date_avail Ожидаемая дата “доступности” товара (проще оставлять пустой)
v_date_added* Дата добавления товара в магазин в формате YYYY-MM-DD HH:mm:ss (формат строгий!)
v_products_quantity Количество единиц товара на складе. Если не используется, вводим “заведомо большое” - 99999
v_products_quantity_order_min Минимальное количество товара для заказа. Если товар “поштучно” - пропускаем (пусто)
v_products_quantity_order_units Количество единиц в “упаковке” товара (полезно при оптовой торговле)
v_products_sort_order Номер для сортировки (чем меньше, тем выше товар в списке)
v_manufacturers_name Производитель
v_categories_name_1 * Категория, в которую добавляется товар. При необходимости, можно указать полный путь (с подкатегориями) до седьмого уровня вложенности. Неиспользуемые уровни оставляем пустыми.
v_categories_name_2
v_categories_name_3
v_categories_name_4
v_categories_name_5
v_categories_name_6
v_categories_name_7
v_tax_class_title* Название налога. (см. Админка - Места/Налоги - Типы налогов).Скорее всего лучше оставить “–нет–”.
v_status* Статус товара (Active/Inactive - соответственно доступен/недоступен). Пропускать нельзя!
v_action Для удаления товара указать “delete”. Если товар удалять не нужно - пропускаем.
EOREOR* EOREOR - символ “конца строки”

Если Вы считаете, что данная информация о формате данных EasyPopulate неполная - отписывайтесь в комментариях. Будем дополнять вместе!

Опубликовано Март 30, 2008 | автор: levik  |  Нет комментариев »