В этой статье я приведу пример скрипта - выгрузки из 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 строк и все отлично было и по сравнению в модулями выгрузки - быстрее в разы т.к. решение кастомное и код заточен только под определенный формат выгрузки. Понятно что работать будет быстрее.
  • Можно при больших объемах выгрузки разделить выполнение скрипта для обхода лимитов памяти и таймаута

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




31.08.2017 7745
Новости из этой категории
08.09.2019 3578
Приятно иметь дело с хорошими людьми. Небольшая история с автором фильтра filter vier Виталием
Небольшая предыстория. Я уже не занимаюсь заказами и работой по техническим заданиям, правками и т.п. Я сейчас полностью перешел на разработку своих модулей.Посмотреть мо..
14.04.2019 11422
Депозит монобанк- обзор и отзывы
Уважаемые посетители, это статья создана для жителей Украины, для гостей с других стран эта статья не будет актуальная. Банк работает только на территории УкраиныДля нача..
19.03.2019 5079
Google против добавления лишнего текста на страницы категорий интернет-магазинов
Сотрудник Google Джон Мюллер (John Mueller) предостерег владельцев сайтов электронной коммерции от добавления ненужного текста на страницы категорий.По его мнению, добавл..
18.03.2019 5325
Как сделать автоматические якори в тексте
Была одна интересная доработка недавно. Надо было создать автоматическое содержание статьи на основании его h1-h6 заголовков.Зачем это нужно и как выглядитЭто нужно что б..
30.12.2018 7316
Google page speed обновился - обзор обновленного сервиса от google
Добро пожаловать в обзор и небольшие наблюдения о трансформации сервиса от гугл - скорость загрузки страниц 'google page speed'. Для начала небольшое отступление.Еще давн..
Вся информация, представленная на сайте, является демонстрационной и оставляя информацию о своих персональных данных, вы добровольно делаете их общедоступными.
Рекомендуем использовать обезличенные данные. Мы используем файлы cookie для вашего удобства пользования сайтом и повышения качества рекомендаций. Подробнее