VirtueMart – интернет-магазин на Joomla. Часть 22. Импорт, экспорт и обновление базы товаров с помощью компонента SimpleCSV.

Наконец-то мы подошли к долгожданной и, наверное, актуальной для многих теме массовой работы с товарами VirtueMart. Под «массовой работой» я подразумеваю автоматический импорт/экспорт/обновление базы товаров интернет-магазина. Для решения этой задачи я хочу предложить использовать компонент SimpleCSV. Что это за зверь, как его использовать, а также, почему не знаменитый CSV Improved, вы узнаете из этой статьи.

 

Поскольку далеко не все вообще знакомы с «массовой работой», начну я издалека. Не секрет, что разработать интернет-магазин – это только треть дела. Кроме этого нужно научиться управлять им, а также применить к нему стратегию, описанную в предыдущей статье. Сегодня мы говорим лишь про управление.

 

Предположим, вы полностью разобрались, как добавлять, редактировать и удалять товары, создавать позиции и свойства, типы, и.т.д. Но, думаю, вы могли заметить, что на добавление одного товара уходит приличное время. Многие, наверное, задумались, а что делать, если этих товаров тысячи, десятки тысяч? Не будешь же каждый добавлять отдельно? Да. Это действительно так. Способ работы с товарами, используемый в VirtueMart, хорош лишь тогда, когда их количество невелико. В противном случае работать становится нереально. Допустим, у нас изменились цены. Это обычное явление. В магазине, скажем, тысяча товаров. И что делать? Менять цену для каждого отдельно. Нет. Вот здесь-то мы и приходим к вопросу массовой работы. Но, к сожалению, в стандартном Virtuemart для этих целей ничего не предусмотрено. Было предусмотрено раньше. В версии VirtueMart для Joomla 1.0.x был встроен компонент CSV Improved, но затем он отделился и стал самостоятельным и платным. С тех самых пор для массовой работы с товарами приходится искать отдельное решение.

Почему не CSV Improved?

CSV Improved – замечательный компонент и с каждым годом становится все лучше и лучше. Разработчики совершенствую его непрерывно, поскольку он приносит им живые деньги. Но мне абсолютно не нравится подход разработчиков к его распространению. Они пошли по пути, лучшему для себя, и худшему для потребителей. CSV Improved платный. Но это не самое печальное. Казалось бы, такой замечательный компонент и купить можно. Но купить-то как раз и не получится. Можно лишь приобрести подписку (лицензию) на один год или несколько лет. При этом подписка на один год на данный момент стоит 35 евро. Не слабо, правда? И это на один домен. Таким образом, получается, что если вы собираетесь постоянно использовать сей замечательный компонент для своего интернет-магазина, вам каждый год придется платить разработчикам примерно по 30 евро. Во веки веков :-) . Ну это если все делать официально.

 

С другой стороны, можно поискать в Сети и ломаный CSV Improved, но это означает отсутствие обновлений и потенциальную угрозу безопасности (т.к. неизвестно, что туда подсадили, пока ломали).

 

До недавнего времени, так или иначе, приходилось использовать CSV Improved, поскольку работающих альтернатив ему просто не было. Но вот не так давно (в этом году), один товарищ, взял да создал альтернативу CSV Improved, да еще и выложил ее в виде Non-Commercial, т.е. берем и пользуемся. Называется компонент SimpleCSV. Конечно, по возможностям ему не сравниться с CSV Improved, но задачу массовой работы он вполне решает. Не знаю, сохранит ли автор SimpleCSV бесплатным в дальнейшем, но пока пользоваться можно. Потому мы остановимся именно на нем.

Возможно, позже я вернусь и к описанию CSV Improved, но пока мне это кажется не лучшей идеей. 

 

Работа с компонентом SimpleCSV.

Перед тем, как начать описание, хочу сказать несколько общих слов. Если вы собираетесь использовать массовую работу с базой товаров VirtueMart, то какой бы компонент вы не использовали, вам придется включить мозг. Просто установить, нажать одну кнопку и радоваться жизни здесь не получится. Готовьтесь к тому, что первые 10 блинов будут комом. А может и больше. Если никак ничего не получается, не отчаивайтесь, пробуйте и пробуйте еще. Могу точно сказать, что все работает.

Итак, начнем. Для начала нужно скачать и установить компонент. SimpleCSV устанавливается как и любой другой компонент Joomla. После установки переходим к компоненту «Компоненты –> SimpleCSV» и видим следующий экран:

 

Импорт и экспорт товаров VirtueMart с помощью SimpleCSV

 

Здесь есть следующие разделы:

Режим – позволяет выбрать текущую операцию, а именно импорт, экспорт или обновление базы товаров;

Разделители – крайне важный раздел, в котором указываются символы разделения данных в CSV-файле. Здесь есть две опции: разделитель поля и разделитель текста. Первый символ выделяет данные одного поля в CSV-файле, второй разделяет поля товара. Так сложно объяснить, подобнее будет в примере ниже.

Последовательность полей – самый большой и сложный раздел. Именно он определяет то, как компонент будет интерпретировать CSV-файл. С настойкой этого раздела возникнет наибольшее количество проблем, поэтому я расскажу о нем отдельно чуть ниже.

CSV – здесь мы указываем CSV файл, из которого берутся данные в случае импорта и обновления.

 

Раздел «Последовательность полей»

Разберем подробнее данный раздел. Прежде всего, нужно понять процесс массовой работы изнутри, т.е. что такое экспорт, импорт, или обновление товаров с точки зрения технологии.

Все товары VirtueMart, а также данные по ним хранятся в соответствующих таблицах базы данных Joomla. Точнее говоря, базы данных компонента VirtueMart, который добавляет свои таблицы к таблицам Joomla. Для того чтобы увидеть все наглядно, запустим phpmyadmin и рассмотрим эти таблицы. Как туда попасть и что это вообще такое можно прочитать в статье «Твой Интернет». Часть 9. База данных Joomla. Открыв нашу базу данных в phpmyadmin, мы увидим слева список таблиц. Те, что относятся к VirtueMart, начинаются с «jos_vm_». Кликнем по таблице jos_vm_product. Появится окно, показанное ниже:

 

Импорт и экспорт товаров VirtueMart с помощью SimpleCSV

 

В этой таблице содержаться все товары магазина и некоторые их свойства.

На рисунке выше мы видим не саму таблицу, а ее структуру, т.е. набор полей таблицы, их тип, и.т.д. Каждая из строк здесь обозначает определенное поле, т.е. столбец таблицы. Теперь взглянем непосредственно на таблицу. Для этого кликнем по ссылке «Обзор» в верхней части экрана:

 

Импорт и экспорт товаров VirtueMart с помощью SimpleCSV

 

Теперь появилась наша таблица с товарами. Здесь мы видим названия полей уже в виде столбцов, а в строках хранятся как раз таки данные о товарах. Каждая строка таблицы соответствует одному товару. Теперь вы представляете, как храниться информация о товарах VirtueMart.

Задача SimpleCSV сводится к тому, чтобы взять CSV-файл (или, проще говоря, таблицу, сформированную в Excel) и перенести данные из нее в базу данных VirtueMart, т.е. просто перенести данные из одной таблицы в другую. А наша задача – объяснить компоненту, как правильно сделать это. (Правда работаем мы не с одной таблицей VirtueMart, а с несколькими, но это уже сложности которыми пока не стоит забивать голову).

Чтобы SimpleCSV правильно перенес данные, мы должны объяснить ему, что в нашем CSV-файле есть что, т.е. какие данные куда нужно записывать. Для этого и служит раздел «Последовательность полей». Но рассказывать о нем опять же, пока рано. Сначала нужно рассмотреть, что же представляет собой CSV-файл.

 

CSV-файл.

Что же такое CSV-файл? Говоря по-простому, это нечто среднее между файлом Excel (*.xls) и текстовым документом (*.txt). Данные в нем можно прочитать блокнотом, но они упорядочены таким образом, что Excel сможет построить их них таблицу. Ниже рассмотрим простейший CSV-файл, полученный путем экспорта из VirtueMart:

 

"1";"1";"Hand Shovel";"4.99000";"<p>Nice hand shovel to dig with in the yard.</p>  "
"2";"3";"Ladder";"49.99000";"A really long ladder to reach high places."
"3";"3";"Shovel";"24.99000";"Nice shovel.  You can dig your way to China with this one."
"4";"3";"Smaller Shovel";"19.99000";"This shovel is smaller but you'll be able to dig real quick."
"5";"1";"Nice Saw";"24.99000";"This saw is great for getting cutting through downed limbs."
"6";"1";"Hammer";"1.00000";"A great hammer to hammer away with."

 

На первый взгляд – жуть, но давайте разберемся. Некую упорядоченность все же заметить можно. Каждая из строк – отдельный товар. В строке данные выделены кавычками, а данные в кавычках разделены точкой с запятой. Именно кавычки и точки с запятой позволяют нам построить из этого файла таблицу. Ведь по сути это и есть таблица, только немного видоизмененная. Данные в кавычках тоже не случайны. Первые две цифры это, соответственно ID товара и ID категории, которой принадлежит товар. Далее идет название и цена товара. Далее краткое описание. Если такой файл открыть с помощью Excel, а не блокнота, то получится следующее:

 

Импорт и экспорт товаров VirtueMart с помощью SimpleCSV

 

Как видим, таблица.

Теперь, когда мы знаем что такое CSV-файл, пришло время разобраться с разделом «Последовательность полей» компонента SimpleCSV. Здесь мы просто указываем в какие столбцы таблицы товаров VirtueMart какие данные CSV-файла записывать. Чтобы сделать это, нам нужно выбрать столбец таблицы базы данных и указать порядковый номер данных в строке CSV-файла. Т.е., в нашем случае «Последовательность полей» должна быть настроена следующим образом(на рисунке показана настройка экспорта, с помощью которой был получен файл , описываемый выше):

 

Импорт и экспорт товаров VirtueMart с помощью SimpleCSV

 

В колонке «Выбор» мы галочками отмечаем столбцы базы данных, в которые будем записывать (либо из которых будем брать (в случае экспорта)) данные, а в колонке «№» указываем порядковый номер этих данных в сроке CSV-файла. Например, если цена в нашем CSV-файле стоит на 4-м месте, то и указать в строке с ценой мы должны номер 4.

Также у нас есть колонка «Значение по умолчанию при импорте». В ней устанавливаются данные, обязательные для существования товара в VirtueMart. Как, например, для каждого товара мы обязательно должны установить будет он опубликован или нет, третьего не дано. Чтобы не усложнять CSV-файл и работу в целом, создана эта колонка.

Теперь весь процесс массовой работы должен быть понятен. Но «понять», не значит «сделать». Чтобы «блинов комом» было как можно меньше, ниже я приведу пошаговый процесс импорта товаров из файла Excel в VirtueMart с помощью компонента SimpleCSV.

Пример пошагового процесса импорта товаров из файла Excel в VirtueMart с помощью компонента SimpleCSV.

Исходные данные:

Предположим у нас есть 3 товара:

Артикул

Наименование

Описание

Стоимость, руб

00001
Воздушный шар
Синий, похож на маленькую тучку, которую не заметят пчелы

2

00002
Горшочек с медом
Сосуд для хранения меда. Содержит любимое лакомство одного известного медведя.
300
00003
Хвост
Мммм… редкий товар, встречающийся только тогда, когда кто-то его теряет.
1000

Кроме того, для каждого товара у нас есть изображение. Вот они:

 

Импорт и экспорт товаров VirtueMart с помощью SimpleCSV

 

Еще мы знаем, что все товары принадлежат категории товаров «Пух».

Теперь нам нужно перенести товары в VirtueMart. Этот процесс пройдет в несколько этапов:

1) Формирование Excel-таблицы и категории для товаров в VirtueMart.

Прежде всего, нам нужно создать в магазине категорию товаров «Пух». Делаем мы это вручную через панель администрирования. К сожалению, SimpleCSV позволяет пока работать массово только с товарами, но не с категориями. Категории придется создавать вручную. Это также может быть проблематично при большом их количестве. Однако, процесс импорта категорий из CSV-файла (такая возможность есть в CSV Improved) – задача далеко не простая, учитывая то, что возможны подкатегории неограниченной вложенности, и неизвестно, что займет больше времени: разобраться с импортом категорий и составить правильный файл импорта, или просто создать все категории вручную. У нас в примере категория всего одна и создаем мы ее вручную.

После создания категории, ей будет присвоен уникальный ID, который потребуется нам для импорта. Посмотреть его можно в списке категорий (самый правый столбец id). ID создается автоматически и у нас он равен 9.

Теперь пришло время формирования Excel-файла. Последовательность столбцов может быть любой. Для импорта это не важно. Важно другое. Изображения. Сами они не должны храниться в файле. В нем будут лишь их названия. Предположим, что наши картинки имеют названия shar.jpggorsh.jpg и hvost.jpg. Именно эти названия мы должны вписать в файл Excel. Сами же изображения мы загрузим отдельно, но об этом чуть позже.

Кто уже успел поработать с VirtueMart знает, что у каждого товара есть минимум два изображения: обычное и мини-изображение. Обычное используется при увеличении, либо на странице товара, а мини при просмотре категорий товара, и, возможно, также на странице товара. Минус массовой работы в том, что эти мини-изображения также должны у нас быть. Можно обойтись и без них, но ведь мы хотим все сделать на совесть? Все изображения, как и все мини-изображения должны иметь одинаковую ширину и высоту(в px), иначе на сайте получится полная котовасия.

В нашем случае я создал из исходных изображений shar.jpggorsh.jpg и hvost.jpg три мини-изображения с названиями shar_min.jpg,gorsh_min.jpg и hvost_min.jpg соответственно. Эти изображения отличаются от исходных только тем, что имеют меньший размер. Их названия мы также должны поместить в отдельную колонку Excel-файла, а сами файлы загрузить на сайт.

Теперь, что касается загрузки. Все изображения и мини-изображения товаров VirtueMart хранятся в папкеcomponents\com_virtuemart\shop_image\product. Т.е. наши картинки нужно загрузить именно в эту папку.

Вернемся к файлу Excel. Теперь он должен содержать в себе следующие столбцы.

– Артикул;
– Наименование;
– Описание;
– Стоимость, руб;
– Название файла изображения товара;
– Название файла мини-изображения товара;
– Категория VirtueMart, в которую нужно поместить товар

Итого 7 столбцов. В строках мы вносим соответствующие данные о товарах. Должно получиться примерно следующее:

 

Импорт и экспорт товаров VirtueMart с помощью SimpleCSV

 

На этом первый этап закончен.

2) Сохранение Excel-таблицы в формате CSV.

Теперь, когда таблица создана, нам нужно сохранить ее в формате *.CSV. Это делается очень просто. В Excel выбираем «Файл –> Сохранить как» Тип файла: «csv (разделители – запятые)». Сохраняем (жмем «Ок» и «Да»). Смотрим, что получилось:

0001;Воздушный шар;Синий, похож на маленькую тучку, которую не заметят пчелы.;2;shar.jpg;shar_min.jpg;9
0002;Горшочек с медом;Сосуд для хранения меда. Содержит любимое лакомство одного известного медведя.;300;gorsh.jpg;gorsh_min.jpg;9
0003;Хвост;Мммм… редкий товар, встречающийся только тогда, когда кто-то его теряет.;1000;hvost.jpg;hvost_min.jpg;9

 

Если сравнивать с примером CSV-файла, который был выше, получилось тоже самое, только нет кавычек. Но это не страшно. Все прекрасно будет работать и без них.

Главное, что нужно сделать – преобразовать получившийся CSV-файл в кодировку UTF-8, без BOM!

Иначе текст не будет виден после импорта. Сделать это можно с помощью любого продвинутого текстового редактора, например Notepad++.

Теперь, когда наш CSV-файл готов, можно переходить к следующему этапу.

3) Импорт CSV-файла в VirtueMart.

Для импорта, мы откроем компонент SimpleCSV и заполним необходимые настройки:

– режим: «импорт»;
– разделитель поля: «;»
– разделитель текста: не имеет значения, т.к. в нашем файле отсутствует;
– CSV: выбираем наш CSV-файл.

Особое внимание к настройкам «Последовательность полей». Т.к. у нас в файле 7 столбцов, то отмечено 7 галочек, расставлен порядок, а также валюта по умолчанию выставлена в рубли. Точная настройка показана на рисунке ниже:

 

Импорт и экспорт товаров VirtueMart с помощью SimpleCSV

 

После того, как все выставлено, жмем кнопку «Импорт / Экспорт / Обновление» в правом верхнем углу и вуаля…. Если все прошло правильно, вы увидите что-то наподобие этого:

 

Импорт и экспорт товаров VirtueMart с помощью SimpleCSV

 

Теперь заходим в список товаров и видим наши импортированные товары:

 

Импорт и экспорт товаров VirtueMart с помощью SimpleCSV

 

Также заходим на сайт и видим их и там:

 

Импорт и экспорт товаров VirtueMart с помощью SimpleCSV

 

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

Мы рассмотрели наиболее простой случай массовой работы с товарами. При использовании всех возможностей VirtueMart задача значительно усложняется, но выполнить ее возможно, главное – не отступать