По просьбам трудящихся, особенно
grevzi попробую поделиться опытом, как я оседлал зверя сего сотонатовского окаянного. Просьба трудящегося в теме иной была, но сия мне более к месту показалась для отповеди.
Внимание! CSVImproved не работает на PHP4, использует настрокий PHP, чтобы обнулить для себя лимиты на выполнение скрипта. Если на хостинге такое поведение запрещено, то тоже работать не будет для больших объемов.
ВступлениеСобственно говоря перед этим делал на версии
Csvimproved 1.5, но при написании опуса сего скудного, обнаружлась версия
CsvImproved 1.7. При регистрации доступна для скачивания с сайта
csvimproved.com==========
Правка от 13.04.2010: Уже доступна версия
Csvimproved 1.9, для которой этот квазил-мануал тоже действителен.
Ругань об отсутствии лицензии можно игнорировать. ==========
Задача:Импортировать товары с типами.
Сразу проблема:Типы надо импортировать отдельным файлом по отдельному шаблону.
Этапы работы:- Подготавливаю прайс с товарами
- Подготавливаю прайс с типами
- Делаю шаблон импорта товаров
- Делаю шаблон импорта типов
- Импорт
- Шаблон экспорта
- Экспорт
- Подготавливаю прайс с товарами
Для начала думаю, какие мне нужны поля.
Для справки могу заглянуть сюда
administrator/index.php?option=com_csvimproved&task=availablefields&controller=availablefields и выбрать из выпадающего списка
product import ->
Применить.
Мой вариант
product_sku^product_name^product_price^product_currency^product_availability^category_path^manufacturer_name^product_publish
Соответственно формирую прайс (например экспортом из OpenOffice в CSV), даю первые строчки файла:
========================================
Правка от 29.09.2009Внимание: Как минимум в последней версии CSVImproved 1.8.1 наблюдается обрезание кириллических символов при импорте.
Проблема описана здесь:
http://joomlaforum.ru/index.php/topic,74701.msg432766.html#msg432766Решение с правкой кода компонента (работоспособность не проверял):
http://joomlaforum.ru/index.php/topic,42648.msg466681.html#msg466681Минус такого решения - при обновлении версий компонента затрётся.
Решение без правки кода:
То есть,
текстовые поля, в которых возможно присутствие кириллицы,
должны быть ограничены кавычками (лучше все поля, кроме цифровых):
product_sku^product_name^product_price^product_currency^product_availability^category_path^manufacturer_name^product_publish
MBASUSP6TSE^"MB ASUS P6T SE X58+ICH10R, 1366 for core i7, DDR3 2000/1800/1600/1333, 2x1Gb Lan, SB 7.1"^227,00^UED^je.gif^"1. Системные платы/Socket 1366"^"Asus"^Y
ASUSRAMPAGEEXTREMEX^"MB ASUS RAMPAGE II EXTREME X58+ICH10R, 1366 for core i7, DDR3 2000/1800/1600/1333, 2x1Gb Lan"^383,00^UED^zamovlennya.gif^"1. Системные платы/Socket 1366"^"Asus"^Y
GIGABYTEGAEX58EXTREME^"MB GIGABYTE GA-EX58-EXTREME iP45+ICH10R, LGA 775, FSB 1600/1333/1066/800, DDR2-1333, 2х1Gb Lan, SB 7"^345,00^UED^zamovlennya.gif^"1. Системные платы/Socket 1366"^"Gigabyte"^Y
.....
Из этого следует, что Excel вообще не может сформировать правильно CSV-файл, ибо в кавычки он брать текст не умеет (по-моему)
При экспорте из OpenOffice можно указать кавычки, как разграничитель текстового поля, и всё будет работать. В софрмированном CSV-файле текстовые поля будут обнесены кавычками, а кавычки в текстовых полях экранированы их дублированием.
Если было
Я люблю "Эскимо"То в CSV будет:
"Я люблю ""Эскимо"""CSVImproved это поймёт правильно.
Есть одно исключение:
Если текстовое поле имеет последним символом обратный слеш
\, то всё полетит к чертям кошачьим.
Как вариант, можно перед экспортом автозаменой заменить обратный слеш
\ на
/.
Или воспользоваться регулярным выражением в OpenOffice и добавить пробел после всех
\ в конце строки (что лучше, чем предыдущий вариант).
Автозамена для OpenOffice:
\\$ на
\\ (два обратных слеша и пробел) в режиме регулярных выражений.
Было до правки:
product_sku^product_name^product_price^product_currency^product_availability^category_path^manufacturer_name^product_publish
MBASUSP6TSE^MB ASUS P6T SE X58+ICH10R, 1366 for core i7, DDR3 2000/1800/1600/1333, 2x1Gb Lan, SB 7.1^227,00^UED^je.gif^1. Системные платы/Socket 1366^Asus^Y
ASUSRAMPAGEEXTREMEX^MB ASUS RAMPAGE II EXTREME X58+ICH10R, 1366 for core i7, DDR3 2000/1800/1600/1333, 2x1Gb Lan^383,00^UED^zamovlennya.gif^1. Системные платы/Socket 1366^Asus^Y
GIGABYTEGAEX58EXTREME^MB GIGABYTE GA-EX58-EXTREME iP45+ICH10R, LGA 775, FSB 1600/1333/1066/800, DDR2-1333, 2х1Gb Lan, SB 7^345,00^UED^zamovlennya.gif^1. Системные платы/Socket 1366^Gigabyte^Y
.....
===============================================
И кладу файл, скажем 1.txt в
/media для дальнейшей заливки.
- Подготавливаю прайс с типами
Тут чуть иначе. Типы у меня уже созданы в БД раньше. Теперь надо забить туда значения.
У меня есть тип
Оптовая цена и два параметра в нём:
Мелкий опт->
small_opt и
Крупный опт->
large_optТакже есть два типа
Наличие на складе (меня родное наличие от VM не устраивает) и
Гарантия с параметрами типов
Наличие товара->
na_sklade_est и сответственно
Гарантия->
garantija.
Формирую файл с типами (выходит, на каждый товар по 3 строчки - по одной на тип)
product_sku^product_type_name^small_opt^large_opt^na_sklade_est^garantija
MBASUSP6TSE^Оптовая цена^226.00^226.00^^
MBASUSP6TSE^Наличие на складе^^^товар есть на складе^
MBASUSP6TSE^Гарантия^^^^36
ASUSRAMPAGEEXTREMEX^Оптовая цена^380.00^378.00^^
ASUSRAMPAGEEXTREMEX^Наличие на складе^^^Уточните наличие товара или доступность под заказ^
ASUSRAMPAGEEXTREMEX^Гарантия^^^^
GIGABYTEGAEX58EXTREME^Оптовая цена^342.00^340.00^^
GIGABYTEGAEX58EXTREME^Наличие на складе^^^Уточните наличие товара или доступность под заказ^
GIGABYTEGAEX58EXTREME^Гарантия^^^^
И кладу файл, скажем 2.txt в
/media для дальнейшей заливки.
- Делаю шаблон импорта товаров
Иду в Components-CSVImproved-Templates и тисну Создать.
Вкладки
Choose your templateImport
Настройки
System Limits
General settings
Сохраняюсь. Выбрасывает в список шаблонов, где жму крайне-правую, можно сказать фашистскую, кнопку в колонке fields

Добавляю 7 моих полей

и сохраняюсь
- Делаю шаблон импорта типов
Иду в Components-CSVImproved-Templates и тисну Создать.
Вкладки
Choose your templateImport
Настройки
System Limits
General settings
Полей никаких не добавляю, они указаны в первой строчке шаблона файла для импорта типов:
product_sku^product_type_name^small_opt^large_opt^na_sklade_est^garantijaСобственно, они тоже указаны у файла с товарами, потому, думаю, поля там тоже не обязательно в шаблон добавлять. Но делал давно, работает, потому не трогаю.
Иду в
Components-CSVImproved - Import. Тисну на свой шаблон
1. Импорт товаровВнизу в поле
Load from server указываю путь к файлу, то есть, поскольку он в
/media, то дописываю к нему
/1.txtВАЖНО! Надо каждый раз руками дописывать, подставление из выпадающего списка не катит, по крайней мере в Лисице. Говорит какую-то ошибку.
Тисну Import справа вверху. Даёт мне посмотреть, правильно ли я вижу первые 5 товаров. Я говорю да, ок, и продолжаю.
У меня импорт 5 тыс. товаров занимает на локальной машине под ВыньХР минут 20-30. На сервере должно быть быстрее, но всё равно порядочно.
Всё по аналогии для типов. По времени у меня где-то то же самое. Файл существенно больше по кол-ву строк, но меньше по их длине.
Примечание
Если я хочу, чтобы после импорта были опубликованы только те товары, которые есть в прайсе, то перед операциями я в PHPMyAdmin даю командуUPDATE `jos_vm_product` SET product_publish = "N"
А после даю команды UPDATE `jos_vm_category` SET `category_browsepage`="browse_2";
UPDATE `jos_vm_category` SET `category_flypage` = "flypage.tpl";
так как импортер у новых категорий прописывает шаблоны категорий по умолчанию.Добавляю шаблон
Choose your templateЭкспорт
Настройки
System Limits
General settings
Поля я себе выбрал такие:

Тисну Экспорт, выбираю свой шаблон и дальше по ситуации.
Вот так. Через гузно, но работает.
ОтступлениеМожно пропустить.
Поскольку у меня в названии категории вероятно появление /, я организовал, чтобы разделитель категорий в прайсе у меня был (:) и внёс изменеия в код компонента:
administrator\components\com_csvimproved\models\category.php
Строчка 159
было:[/list]
$category_list = explode("/", $line);
стало $category_list = explode("(:)", $line);//##my Замінив роздільник категорій із / на (:)
Илюстрации во вложении.
========================
14.04.2010
Возможная проблема:
При импорте цена вместо нужной превращается в непонятное число.Решение от sokoll:
если ручками создавать товар то валюта в списке около цены RUB
если черз файл импорта то RU.
т.е. не распознает валюту отсюда косяк.
проверил теорию - все работает. Т.е. надо файл такой
20^ДВС^бачек^100,00^RUB^Nissan^Y
[вложение удалено Администратором]