Как выгрузить товары из OpenCart. Как сделать выгрузку чего либо из Opencart в Excel (xlsx) Обновленный модуль для экспорта больших xls файлов
От автора: приветствую вас, друзья. Итак, мы продолжаем цикл статей, посвященных знакомству с одной из популярнейших CMS для создания интернет-магазинов – OpenCart (Оперкарт). В этой статье мы поговорим о том, как выгрузить товары из OpenCart в Excel.
OpenCart замечательная система с большим набором возможностей для небольших и средних интернет-магазинов. Однако, некоторых вещей, которые могут пригодиться в работе, в ней все же не хватает. Например, полезной возможностью для любого магазина может быть экспорт и импорт товаров в Excel. К сожалению, из коробки такого функционала в движке нет.
Но не стоит унывать, ведь есть расширения функционала. В сети без проблем можно найти бесплатный модуль , который поможет добавить недостающую полезную возможность. Давайте скачаем его и перейдем к установке.
Идем в меню Дополнения – Установка дополнений и загружаем полученный архив с модулем.
Далее, как вы уже знаете, необходимо обновить кэш. Для этого переходим в меню Дополнения – Менеджер дополнений и в правом верхнем углу жмем кнопку Обновить. После данного действия в меню Инструменты мы найдем новый пункт – Export / Import. Перейдем к нему.
Здесь мы найдем три вкладки. На первой мы можем сделать экспорт товаров и всего, что с ними связано. Вторая вкладка позволяет осуществить обратную процедуру – импорт. Ну а последняя вкладка предлагает ряд настроек. Модуль полностью русифицирован, поэтому все должно быть понятно. Давайте попробуем экспортировать товары.
В полученном файле Excel мы найдем не только лист с товарами, но и листы с опциями, атрибутами и прочими связанными сущностями.
Теперь мы можем в удобном виде редактировать товары. Например, переименуем какой-либо товар, скажем iPhone переименуем в iPhone 7 и изменим цену, вместо 101 я укажу 150.
Сохраним файл и попробуем импортировать его. Во вкладке Импорт мы можем оставить включенной по умолчанию опцию обновления данных или же выбрать опцию удаления данных перед импортом. Вторая опция пригодится, если вы вносите существенные правки, например, удаляете часть товаров.
Если все прошло успешно и без ошибок, тогда по окончании импорта мы увидим соответствующее уведомление:
От автора: приветствую вас, друзья. Итак, мы продолжаем цикл статей, посвященных знакомству с одной из популярнейших CMS для создания интернет-магазинов – OpenCart (Оперкарт). В этой и нескольких следующих статьях мы будем работать непосредственно с кодом CMS и реализуем выгрузку товаров из заказов за выбранный период в Excel.
Итак, как уже отмечалось выше, в этой статье мы с вами начнем работать с кодом OpenCart и создавать свой собственный функционал, который вы в дальнейшем по своему желанию сможете оформить в виде модуля. В качестве задачи мы возьмем реализацию функционала выгрузки заказанных товаров за некоторый промежуток времени в Excel. Задача вполне реальна, и я взял ее из своей практики. Менеджерам достаточно часто необходимо анализировать продажи, скажем за месяц, и это куда удобнее сделать, имея список проданного в Excel, а не просматривая заказы в админке.
Для реализации поставленной задачи нам потребуется библиотека PHPExcel. Как работать с этой библиотекой – можно посмотреть в . Саму библиотеку вы можете найти на GitHub или взять из к этой статье.
Давайте создадим в корне сайта OpenCart папку – я назову ее wfm_export_orders – и положим в нее библиотеку PHPExcel. Также в эту же паку поместим какую-нибудь анимационную картинку (у меня это будет файл ring.svg), которая нам понадобится в дальнейшем. В итоге должна получиться следующая структура:
В корне сайта на Опенкарт — kraplina.loc – находится папка wfm_export_orders с озвученным выше содержимым.
Теперь пришло время заняться страницей списка заказов. Наша задача – разместить на этой странице пару дополнительных полей, в которых можно будет указать начальную и конечную дату для экспорта заказов. Также нам потребуется кнопка, отправляющая выбранный интервал дат на сервер.
Задача понятна – выполняем. Откроем шаблон списка заказов — site\admin\view\template\sale\order_list.tpl и в нужном месте поместим следующий код:
Экспорт заказов
< ! -- export -- > < div class = "panel-body" > < div class = "well" > < h3 > Экспортзаказов< / h3 > < div class = "row" > < div class = "col-sm-6" > < div class = "form-group" > < label class = "control-label" for = "wfm_start_date" > Начальнаядата< / label > < div class = "input-group date" > < input type = "text" name = "wfm_start_date" value = "" placeholder = "Начальная дата" data - date - format = "YYYY-MM-DD" id = "wfm_start_date" class = "form-control" / > < span class = "input-group-btn" > < button type = "button" class = "btn btn-default" > < i class = "fa fa-calendar" > < / i > < / button > < / span > < / div > < / div > < / div > < div class = "col-sm-6" > < div class = "form-group" > < label class = "control-label" for = "wfm_end_date" > Конечнаядата< / label > < div class = "input-group date" > < input type = "text" name = "wfm_end_date" value = "" placeholder = "Конечная дата" data - date - format = "YYYY-MM-DD" id = "wfm_end_date" class = "form-control" / > < span class = "input-group-btn" > < button type = "button" class = "btn btn-default" > < i class = "fa fa-calendar" > < / i > < / button > < / span > < / div > < / div > < / div > < div class = "col-sm-12" > < button type = "button" id = "button-export" class = "btn btn-primary pull-right" > < i class = "fa fa-filter" > < / i > Экспорт< / button > |
Часто так бывает что нам надо выгрузить какие-то данные из магазина Opencart в excel таблицу (файл xlsx).
Да, можно поискать модули, которые смогут это сделать. Но как правило готовые решения дорого стоят и это будет большой комбайн который будем использовать всего на 5%. Зачем все это придумывать, если имея прямые руки можно сделать выгрузку любых товаров в таблицу эксель.
Да и по моим наблюдениям того что хотят заказчики выгружать в файл как правило нет в готовых модулях. Ну что же нет, так нет. Будем делать свою "кастом" выгрузку:)
Для этого нам понадобится библиотека PHPExcel с помощью которой мы создадим файл excel и запишем в него любые данные из нашего магазина. .
После того как скачали, все содержимое архива загружаем в корень сайта (там где файл index.php). После этого идем в админку и делаем ссылку на выгрузку. Для этого открываем файл admin/view/template/common/header.tpl или admin/view/template/common/menu.tpl и в нужном месте прописываем ссылку
">Скачать данные
Где index.php?route=catalog/product/downexp - это путь к функции выгрузки, а именно функция downexp в файле admin/controller/catalog/product.php
Примечание. Если в ссылке будет ругаться на token, а именно undefined index token это означает что переменная token неопределена. В таком случае надо зайти в контроллер admin/controller/common/header.php (menu.php) и добавить в функцию index строку:
$data["token"] = $this->session->data["token"]; //($this->data["token"] = $this->session->data["token"]; - для Opencart 1.5)
Public function downexp() {
$cwd = getcwd();
chdir(DIR_SYSTEM."PHPExcel");
require_once("Classes/PHPExcel.php");
chdir($cwd); //подключили библиотеку
$phpexcel = new PHPExcel();
$this->load->model("catalog/product");
$this->load->model("catalog/category");
$this->load->model("catalog/manufacturer"); //подключили нужные для выгрузки модели
$filter = array(
"start" => 0,
"limit" => 9999999999999
);
$products = $this->model_catalog_product->getProducts($filter); //берем все продукты
$page = $phpexcel->setActiveSheetIndex(0); //создаем вкладку
$page->getColumnDimensionByColumn("0")->setWidth(40);
$page->getColumnDimensionByColumn("1")->setWidth(70);
$page->getColumnDimensionByColumn("2")->setWidth(20);
$page->getColumnDimensionByColumn("3")->setWidth(20);
$page->getColumnDimensionByColumn("4")->setWidth(8);
$page->getColumnDimensionByColumn("5")->setWidth(6);
$page->getColumnDimensionByColumn("6")->setWidth(12); //задаем ширину столбцов
$page->setCellValue("A1", "Категория");
$page->setCellValue("B1", "Товар");
$page->setCellValue("C1", "Производитель");
$page->setCellValue("D1", "Модель");
$page->setCellValue("E1", "Артикул");
$page->setCellValue("F1", "Цена");
$page->setCellValue("G1", "Количество"); //прописали в первой строке название столбцов
$i=2;
foreach($products as $product){ //перебираем массив продуктов и записываем в файл
$cats = $this->getPathByProduct($product["product_id"]);
$cat_text = "";
$cats_arr = explode("_", $cats);
foreach($cats_arr as $category_id){
$category_info = $this->model_catalog_category->getCategory($category_id);
$cat_text .= $category_info["name"] . "/";
}
$cat_text = rtrim($cat_text, "/");
$manufacturer = $this->model_catalog_manufacturer->getManufacturer($product["manufacturer_id"]);
$page->setCellValue("A$i", $cat_text);
$page->setCellValue("B$i", $product["name"]);
$page->setCellValue("C$i", $manufacturer["name"]);
$page->setCellValue("D$i", $product["model"]);
$page->setCellValue("E$i", $product["sku"]);
$page->setCellValue("F$i", $product["special"]?$product["special"]:$product["price"]);
$page->setCellValue("G$i", $product["quantity"]);
$page->setTitle("Товары");
$filename = "products.xlsx";
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment;filename="".$filename.""");
header("Cache-Control: max-age=0");
$objWriter = PHPExcel_IOFactory::createWriter($phpexcel, "Excel2007");
$objWriter->setPreCalculateFormulas(false);
$objWriter->save("php://output"); //отдаем файл в браузер по ссылке
}
Где у меня в файле есть функции из seopro getPathByProduct и getPathByCategory они в примере нужны для формирования правильной вложенности категорий.
В эту выгрузку можно запихнуть любые данные, товары, категории, заказы, покупателей, да все что потребуется в любом виде. Все что надо это сделать выборку из базы, сформировать и записать в файл, на примере видно как делается запись.
Если будут вопросы - спрашивайте в комментариях, подскажу по мере возможности. Также если нужна будет такая выгрузка обращайтесь смогу написать под заказ.
Обзор всех модулей (платных и бесплатных) для импорта, экспорта и обновления товаров в Opencart из файлов xls и csv
После установки Opencart большинство начинающих магазинов наполняют его через админку. Но что бы заполнить весь магазин товарами необходимо очень много времени и нервов:)
У меня в обзоре такие модули:
К счастью для Opencart есть модули для экспорта и импорта товаров. В чем заключается выгрузка и загрузка. Экспорт товаров происходит в файл xml, xls или csv - где будут все товары и их характеристики, которые уже есть в магазине. Импорт - это наоборот, мы подготавливаем файл нужного формата, выбираем его в модуле импорта, и товар автоматически загружается в базу интернет магазина. Вот так, в пару кликов, можно загрузить много позиций, на которые ушло бы очень много времени, добавляя их через админку. Все модули похожие, но все же отличаются своей работой и структурой необходимых файлов для выгрузки.
Для начала пару рекомендаций. Для подготовки файла выгрузки, сначала добавьте пару товаров в магазин через админку, сделайте экспорт, и уже в экспортированный файл добавляйте новые позиции, так вы будете в уверенности что файл для импортирования будет правильной структуры и формата.
Еще что бы после выгрузки каждому товару отдельно не добавлять изображения, при формировании файла сразу прописывайте изображения в нужную колонку. Например catalog/tovar/1.jpg, catalog/tovar/2.jpg и т. д. А потом надо будет загрузить на сервер папку с соответствующими фото.
Также следите за кодировкой файла, это очень важно т. к. из-за кодировки на сайте появится много товаров с крякозяблями, которые надо будет и удалять.
Что мы все вокруг да около. Переходим к обзору модулей для экспорта и импорта товара в Opencart.
CSV Import Pro
Этот модуль умеет делать экспорт, импорт и обновление товаров в магазине. Большим плюсом есть то, что его можно гибко настроить, в т.ч. и кодировку.
Для работы этим модулем нам надо создать файл для импорта в формате CSV . Создать такой файл можно в обычном MS Excel или Open Office Calc. Вносим все данные и нажимаем сохранить как CSV.
Модуль платный, но стоит своих денег. Времени вы сэкономите очень много импортируя товар через него. Основные функции:
- Импорт/экспорт , ;
- Импорт/экспорт , штрихкодов товара;
- Импорт/экспорт , статусов товара;
- Импорт/экспорт , ;
- Импорт/экспорт по имени, модели, артикулам;
- Импорт/экспорт SEO-атрибутов ;
- Импорт/экспорт ;
- Импорт/экспорт ;
- Импорт/экспорт ;
- Калькуляция цен товара при добавлении или обновлении товара;
- Поиск и обновление товара по product_id, по модели, наименованию, артикулам, штрихкодам;
- Удаление товара из каталога по product_id, по модели, наименованию, артикулам, штрихкодам;
- Выгрузка товара (экспорт) на основе критериев отбора;
- Поддержка профилей для добавления или обновления товаров (будет использовано автоматическом импорте из файла);
- Поддержка макроопределений для полей таблиц product и product_description;
- Импорт/экспорт структуры каталога категорий;
- Импорт/экспорт названия, описания, изображений категорий;
- Импорт/экспорт фильтров категорий;
- Импорт/экспорт SEO-атрибутов категорий;
- Поддержка макроопределений для полей таблиц category и category_description;
- Импорт/экспорт названия, описания, изображений производителей;
- Импорт/экспорт SEO-атрибутов производителей;
- Поддержка макроопределений для полей таблиц manufacturer и manufacturer_description;
- Выгрузка (экспорт) данных клиентов интернет-магазина;
- Выгрузка (экспорт) заказов интернет-магазина;
- Поддержка нескольких языков интернет-магазина;
- Поддержка мультимагазинов;
- Импорт/экспорт товаров по CRON;
Купить модуль импорта можно по ссылке
Как видим это очень функциональный и гибко настраиваемый модуль. Далее будем смотреть бесплатный аналог который работает с xls форматом
Модуль import/export xls
Прекрасный модуль для экспорта и импорта товаров в Opencart. По использованию скажу он простой до безобразия, и очень удобный для новых магазинов.
Для сайтов, где требуется обновить или добавить товары это не совсем лучшее решение, так как он перезаписывает все товары из Excel файла полностью . То есть в магазинах, где есть уже заведенные товары и мы сделаем импорт, то останутся только позиции, которые были в файле, что согласитесь не очень удобно.
Однако я делаю все проще. Даже учитывая этот недостаток можно полностью использовать этот модуль. Для загрузки или обновления товарного состава или наличия сначала делаем выгрузку товаров (экспорт). Полученный файл открывает в Excel и в конце вставляем все наши новые товары. Id в таком случае всегда увеличиваем на 1 от максимального значения в столбце.
Есть, конечно, и коммерческие аналоги, которые гибки в настройках и позволяют частями загружать товарные позиции, однако и с бесплатным аналогом можно отлично работать. Тем более что в адекватной ценовой планке я не видел конкурентных модулей, где можно сразу импортировать , категории и другие .
Для работы модуля нужен хостинг, где будет достаточно оперативной памяти, так как из-за своей специфики он очень «прожорлив » так как используется библиотека PHPExcel , которая уже есть в составе загрузки.
Для примера возьмем интернет магазин где есть 13 500 товаров и 300 категорий. Требования будут следующие:
- Размер файла xls будет порядка 9-10 Мб.
- Использование памяти для экспорта до 13 Мб
- Использование памяти для импорта до 355 Мб
Исходя из этого, для комфортной работы с модулем нужны следующие настройки сервера:
- memory_limit 512M
- post_max_size 16M
- upload_max_filesize 16M
Если ваш хостинг подходит - скачивайте файл и распаковывайте его к себе на ПК. Далее содержимое папки upload нужно загрузить на сервер. Внимание! Модуль требует vqmod для вставки ссылки на модуль в админке.
После загрузки переходим Дополнения – Export/Import далее все предельно просто. Если будут вопросы по полям в файле xls задавайте в комментариях все подробно поясню.
Обновленный модуль для экспорта больших xls файлов
Предыдущий модуль для экспорта/импорта очень требователен к ресурсам, по этому в больших файлах во время выгрузки может возникнуть ошибка Fatal Error: Allowed memory size of ... наша выгрузка завершиться неудачей. Это очень большой недостаток. Но мир не без добрых людей и я на опенкарт форуме нашел модуль такого же импорта, только без ошибки.
Суть его в том, что он поэтапн о (кусками) загружает файл тем самым не перегружая сервер, и загрузка проходит удачно даже при больших размерах данных.
Она также как и предыдущий может выгружать и атрибуты, и опции и все мета теги, описания и.т.д. Его и рекомендую для работы.
Работа с прайс-листами
Этот модуль создан только для импорта товаров в магазин с разных прайс листов поставщиков. Очень удобная обработка. Вот основные функции модуля:
- обработка сразу всех прайсов ваших поставщиков (много)
- обновление цен и остатков (*если цена = 0, значит нет в наличии)
- выбор минимальной цены из нескольких поставщиков + автоматическая настраиваемая наценка (для разных диапазонов цен - разная наценка)
- вывод новых товаров поставщиков, которых нет еще в вашем магазине
- назначение конкретных цен на определенные товары (игнорирование функций наценки, т.е. какую поставили цену такая и будет в магазине). Если у всех поставщиков 0, то в итоге будет 0.
- отдельный лист для импорта в магазин (удобнее это делать с модулем CSV Price Pro import/export)
- отдельный лист "Готовый прайс" для удобной работы с товарами. Заказали товар - смотрим у какого поставщика забирать.
Модуль импорта файлов xls, csv
Хороший модуль тем, что он умеет работать как с CSV так и с XLS он более гибкий в этом плане. Хорошо настраиваемый. Вот основные его функции:
- Можно создавать настройки для разных *.csv структур
- Можно создавать деревья категорий и импортировать продукты в несколько категорий сразу
- Можно осуществлять импорт продукты в мультиязычных магазинах
- Можно указать несколько полей из *.csv файла для полей продукта, категории, производителя, атрибутов
После всех обзоров можно сделать вывод что каждый модуль по своему уникальный и имеет право на существование. Я пользовался как платными, так и бесплатными модулями для импорта и хочу сказать что работать можно со всеми. Но конечно, когда что-то не получается, лучше обратится за тех поддержкой к продавцу и решить проблему, нежели мучатся с бесплатным модулем без поддержки от разработчика.
Автоматическая обработка прайс листов
Пожалуй самым лучшим в списке будет модуль "Автоматическая обработка прайс листов". Он по праву считается ТОП модулем среди аналогов. Забегая на перед скажу сразу имел дело с ним - поддержка отличная! Также автор идет на встречу разработчикам и дает хорошие скидки покупателям.
Модуль позволяет создавать для каждого поставщика свою выгрузку. То есть фактически все что нужно это указать в настройках какую колонку куда импортировать. Достаточно все просто, но по начала надо будет прочитать инструкцию и вникнуть в модуль. Он умеет обрабатывать связи таких модулей как связанные опции, серии товаров, валюта плюс, изображения опций и другие.
Фишка в том что он умеет парсить информацию с других сайтов. Также одновременно может парсить фото с одного сайта, описание с другого. В модуле присутствует функционал генерации SEO и мета описаний, шаблон можно настроить также индивидуально.
Кратко о возможностях:
- импорт из прайс-листов новых товаров и обновление цен и остатков существующих
- автоматический выбор поставщика по минимальной цене на один и тот же товар
- автоматическая установка цен на товары на основании анализа цен конкурентов
- поддерживается несколько магазинов.
- загрузка, обновление и парсинг опций. Поддерживаются "Связанные опции".
- поддерживаются артикулы в опциях. Цены опций пересчитываются, как "плюс к минимальной цене".
- поддержка фото в опциях.
- профессиональная функция загрузки любой колонки прайса в любое поле БД
- обновление фото и описания товара по критерию качества
- вычисление маржи, в зависимости от величины цены (по ценовым диапазонам) или в зависимости от категории товара и по ценовым диапазонам.
- автоматическая загрузка товаров одновременно в несколько категорий.
- автоматическое создание категорий в магазине с учетом их вложенности (с фото и описаниями).
- автоматическое создание атрибутов, значений опций и производителей на основании данных из прайс-листа на двух языках.
- автоматическое создание seo-данных и seo-url для товаров, категорий и производителей, по гибкому шаблону.
- автоматическое создание уникальных описаний товаров по шаблону (программируемый шаблон).
- загрузка "похожих" товаров, и товаров со специальной и скидочной ценой, по группам пользователей.
- поддержка модуля "redirect".
- собственный склад магазина (Главный поставщик).
- 182 дополнительных, полезных функций, типа: "Обнулить остатки", "Пересчитать цены", "Найти и заменить в Опциях/Атрибутах/Описании/Названии", "Стандартизировать атрибуты для фильтра"....
- Библиотека связанных Артикулов
Купить модуль Автоматическая обработка прайс листов можно по ссылке .
Ребят, думаю что получился неплохой обзор, всем хорошо "выгрузится" и большой удачи в делах! :)