Особенности модуля Import/Export Tool для OpenCart

Модуль Import/Export Tool для OpenCart весьма популярен в мире. Он позволяет делать импорт экспорт информации интернет магазина на OpenCart в формате популярного табличного редактора Excel. Ну и не стоит забывать, что он абсолютно бесплатен. Видимо это в купе с хорошим функционалом стало причиной популярности именно этого модуля. Только с официального сайта модуль скачали около 40 000 раз.

Использование XLS формата обмена данными по сравнению с CSV обеспечивает возможность передачи HTML кода в ячейках. Проблема CSV в том, что кавычки, которыми обычно экранируются начало и конец ячейки могут быть так же частью HTML кода. Это приводит к нарушению целостности и ошибкам обмена данных. XLS формат помогает избежать этих проблем.

Фунционал модуля Import/Export Tool действительно широк. Можно совершать обмен данными каталога (опции, атрибуты, товары, категории), заказов (заказчики, заказы), то, что не достает можно заказать у его разработчиков за доп. плату.

Особенности поля «Производитель» при импорте из 1С

Много вопросов у всех вызывает работа именно с полем Производитель (Manufacturer). Сегодня о нем и поговорим. В OpenCart в таблице товаров имена производителей не хранятся и это разумно. Указывается только ID производителя, а сами производители это целых три отдельных таблицы базы данных. Тут собака и зарыта. Если взглянуть на пример таблицы экспорта модуля Import/Export Tool, то можно убедиться, что в колонке manufacturer указан не ID, а вполне себе человеческое название:

Разработчики модуля не поленились, при импорте товаров вам не нужно знать ID производителя, достаточно лишь указать его имя. Однако, если вдруг такого производителя не окажется в OpenCart, модуль выдаст не просто ошибку, а выдаст белый экран (500-я ошибка сервера, проверено на 1.5.x и 2.x OpenCart). Обратившись к логу ошибок OpenCart вы увидите ошибку:

2017-08-04 23:08:17 - PHP Notice: Undefined index: &DKNY in /home/******/******.com/www/admin/model/tool/export_import.php on line 854
2017-08-04 23:08:17 - PHP Notice: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''data/fTov0000002306.jpeg',1,30.81,0,NOW(),NOW(),NOW(),0,7,1,0,0,0,0,0,'4','0','' at line 1<br />Error No: 1064<br />INSERT INTO `oc_product` (`product_id`,`quantity`,`sku`,`upc`,`ean`,`jan`,`isbn`,`mpn`,`location`,`stock_status_id`,`model`,`manufacturer_id`,`image`,`shipping`,`price`,`points`,`date_added`,`date_modified`,`date_available`,`weight`,`weight_class_id`,`status`,`tax_class_id`,`viewed`,`length`,`width`,`height`,`length_class_id`,`sort_order`,`subtract`,`minimum`) VALUES (318724,0,'','','','','','','',2,' ',,'data/fTov0000002306.jpeg',1,30.81,0,NOW(),NOW(),NOW(),0,7,1,0,0,0,0,0,'4','0','1','1'); in /home/******/********.com/www/system/database/mysql.php on line 49

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

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

Dolce & Gabbana

Все поля кроме Manufacturer в этом модуле проходят через функцию, которая преобразует символы вроде &, <, >, ‘, » в их HTML код, что помогает корректно хранить информацию в БД:

« &quot; &#34; двойная кавычка
& &amp; &#38; амперсанд
« &laquo; &#171; левая типографская кавычка (кавычка-елочка)
» &raquo; &#187; правая типографская кавычка (кавычка-елочка)
&#8249; одиночная угловая кавычка открывающая
&#8250; одиночная угловая кавычка закрывающая
&prime; &#8242; штрих (минуты, футы)
&Prime; &#8243; двойной штрих (секунды, дюймы)
&lsquo; &#8216; левая верхняя одиночная кавычка
&rsquo; &#8217; правая верхняя одиночная кавычка
&sbquo; &#8218; правая нижняя одиночная кавычка
&ldquo; &#8220; кавычка-лапка левая
&rdquo; &#8221; кавычка-лапка правая верхняя
&bdquo; &#8222; кавычка-лапка правая нижняя

Однако поле Manufacturer через эту функцию не прогоняется, в результате, если у вас есть бренд Dolce & Gabbana или Marc & Spencer, он не импортируется, а скрипт выдаст ошибку импорта и ничего не загрузит. Поэтому на этапе выгрузки из 1С или табличных прайс листов делайте замену амперсанта на HTML код &amp;

На этом сегодня все! Желаем успешных импортов-экспортов :)

Игорь Чишкала

Директор по технологиям в SoftForge. Люблю ИТ, пишу технические статьи в этом блоге или для сайта фриланс-биржи Upwork. Кодю на PHP с использованием фреймворков Laravel или Symfony.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *