Импорт данных из CSV (XLS) в Opencart

категория: , Полезности


Опубликовано: 31.08.2017 Просмотров: 513 Комментарии: 1


Импорт данных из CSV (XLS) в Opencart


В этой статье я приведу пример скрипта - выгрузки из xls (csv) в Opencart. Этот скрипт может понадобится в таких случаях:

  1. Необходимо первоначально выгрузить на сайт товары поставщика
  2. Необходимо обновлять цены из прайса по артикулу
  3. Можно сделать выгрузку для каждого поставщика
  4. Когда нужно загрузить в магазин специфические данные, либо в нестандартном формате.

Итак. Для выгрузки нам надо будет то что импортируем. Это как правило прайс лист в формате Microsoft Office Excel (xls,xlsx), либо другие форматы, это не столь важно. Главное что бы открыв этот файл в программе Excel его можно было сохранить в формат CSV с каким-то разделителем.

Пусть для примера у нас будет такой вот прайс в xls формате, сохраним с разделителем - ;


Продукт1

model-23

385

Описание

Продукт2

model-24

520

Описание для второго товара

Продукт3

model-25

113

Описание для третьего

где 1) Название товара, 2)Модель, 3) Цена, 4) Описание

Важная информация. Разделитель - это какой-то символ, который отделяет ячейки друг от друга, например: Ячейка1;Ячейка2;Ячейка3 или Ячейка1,Ячейка2,Ячейка3. Как видим в первом примере это точка с запятой, во втором - запятая. Понятно, что если в тексте есть этот символ - такой разделитель нельзя использовать т.к. он нарушит порядок ячеек. Важно помнить - разделитель должен быть в тексте только на месте соприкосновения ячеек, в тексте он не должен быть.

Итак, мы сохранили наш прайс в формат CSV. Далее будет приведен максимально простой пример реализации выгрузки, а именно весь документ мы откроем в текстовом редакторе и запихнем его в файл в котором будет код импорта.

Как содержимое CSV обработать с помощью PHP

Для начала открываем файл в котором будет нам скрипт. Например можно разместить все в файле admin/controller/catalog/product.php в функции index. После строки

public function index() {

Вставим содержимое нашего прайса, с примера выше, после сохранения в CSV оно будет таким:

Продукт1;model-23;385;Описание
Продукт2;model-24;520;Описание для второго товара
Продукт3;model-25;113;Описание для третьего

Мы его копируем и создаем переменную:

$document = "Продукт1;model-23;385;Описание
Продукт2;model-24;520;Описание для второго товара
Продукт3;model-25;113;Описание для третьего"; //наш файл уже как переменная

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

$upload_data = array(); // объявляем массив товаров для выгрузки
$document_data = explode(PHP_EOL, $document); //разбиваем наш прайс по строкам (explode - разбор, PHP_EOL - каждая новая строка как новый элемент)
foreach($document_data as $row){ //перебираем циклом массив строк
    $row_data = explode(";", $row); //разбиваем строку на ячейки (";" - наш разделитель ячеек)
    $upload_data[] = array( //записываем данные ячеек в массив продуктов для импорта
        "name" => $row_data[0], // данные из 1 ячейки - Название товара
        "model" => $row_data[1], // данные из 2 ячейки - Модель товара
        "price" => $row_data[2], // данные из 3 ячейки - Цена товара
        "description" => $row_data[3] // данные из 4 ячейки - Описание товара
    );
}

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

Это самый простой пример, и запускаться он будет всякий раз при заходе в товары. Это сделано для пример, для упрощения понимания.

Как можно улучшить выгрузку

  • Можно добавить в админке форму выбора файла и при его загрузке делать импортирование
  • Можно указать где лежит на сервере файл и его считывать при помощи функции PHP file_get_contents
  • Можно сделать большую выгрузку данных - просто увеличивая объем файла и количество полей. На практике я выгружал 50 000 строк и все отлично было и по сравнению в модулями выгрузки - быстрее в разы т.к. решение кастомное и код заточен только под определенный формат выгрузки. Понятно что работать будет быстрее.
  • Можно при больших объемах выгрузки разделить выполнение скрипта для обхода лимитов памяти и таймаута

Надеюсь статья будет полезная для создания выгрузок в ваши магазины. Если будут вопросы - спрашивайте в комментариях.


Комментарии:


Фото комментатора

Санчо 01.09.2017

Спасибо за пример скрипта, действительно в некоторых случаях крайне полезная вещь :) Но мне бы информацию как загрузить непосредственно из файла xls без конвертации в csv? Хочу вот что сделать: выбор файла в админке - при его выборе идет передача его на скрипт который уже обрабатывает. Сам скрипт загрузки и передачи файла я сделаю, но эта конвертация совсем не в тему. Подскажите пожалуйста как лучше сделать прямую выгрузку, да и можно ли вообще?
Администратор

Ответ for-opencart.com 01.09.2017

Да, непосредственно из xls можно сделать выгрузку. Для этого требуется сего лишь скачать библиотеку PHPExcel и уже туда передать на разбор загруженный файл. Плюсы конечно очевидные, но есть минусы - эта бибилиотека очень прожорливая к оперативной памяти на сервере. Если мало - будет обрываться. Как вариант либо брать больше памяти, либо делать пошаговую загрузку.

Быстрый поиск

Похожее

  • экспорт импорт opencart

    Обзор всех модулей (платных и бесплатных) для импорта, экспорта и обновления товаров в Opencart из файлов xls и csv

Новое на сайте