Статьи

Создание инструмента импорта CSV-продукта в OpenCart: часть 2

В нашем последнем уроке мы обсуждали, как реализовать инструмент импорта, в котором мы создали кнопку импорта и ее внешний интерфейс. Сегодня мы узнаем, как напрямую импортировать объемные данные с наших компьютеров в нашу систему OpenCart.

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

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

Импортировать страницу CSV
  1. Перейдите к admin/controller/catalog/product.php .
  2. Найдите importCSV() , которую мы создали в предыдущем уроке.
  3. Поставьте if (($this->request->server['REQUEST_METHOD'] == 'POST') ) {} после него, чтобы гарантировать, что часть кода будет выполнена только при условии отправки вышеуказанной формы.
  4. Внутри вышеприведенного блока кода мы добавим код, поясняемый шаг за шагом.

Следующий код открывает отправленный файл CSV и обрабатывает его только для чтения.

1
2
3
4
<?php
$file = $_FILES[‘csv’][‘tmp_name’];
$handle = fopen($file,»r»);
?>

Теперь нам нужно пройти через каждый ряд CSV и сохранить в нашу базу данных. В связи с этим мы будем перебирать записи и соответственно их сохранять.

01
02
03
04
05
06
07
08
09
10
11
12
13
<?php
while ($data = fgetcsv($handle,1000,»,»,»‘»)) // parses the line it reads for fields in CSV format and returns an array containing the fields read.
{
    if ($data[0]!=») // if column 1 is not empty
    {
        $this->model_catalog_product->importCsvData($data);
    }
    else
    {
        // in case of errors, put debug code here
    }
}
?>

После завершения импорта пользователь должен быть перенаправлен, поэтому следующий код перенаправляет пользователя в форму и выдает сообщение об успехе.

1
2
3
4
<?php
$this->session->data[‘success’] = ‘CSV Successfully Imported!’;
$this->redirect($this->url->link(‘catalog/product’, ‘token=’ . $this->session->data[‘token’] . $url, ‘SSL’));
?>

До этого момента мы создали функцию, которая только загружает CSV, читает данные по строкам и анализирует их в модели. Теперь нам нужно создать модель, как определено в коде контроллера, которая отвечает за сохранение проанализированных данных в БД.

  1. Перейдите к admin/model/catalog/product.php .
  2. Создайте там публичную функцию с именем importCsvData($data) .
  3. Внутри функции модели мы добавим этот код, который содержит несколько запросов для сохранения данных.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
<?php
$product_id = $data[0];
$model = $data[1];
$name = $data[2];
$quantity = $data[3];
 
if($product_id!=»)
{
    $query = $this->db->query(«UPDATE `».DB_PREFIX.»product` SET model='».$model.»‘,quantity='».(int)$quantity.»‘ WHERE product_id='».$product_id.»‘»);//updating product quantity & its model
    if($name)
    {
        $query = $this->db->query(«UPDATE `».DB_PREFIX.»product_description` SET name='».$this->db->escape($name).»‘ WHERE product_id='».$product_id.»‘»);
    }
}
 
?>

Итак, сегодняшний урок посвящен предоставлению полного решения для системы экспорта / импорта. Мы предлагаем такое решение, в котором пользователи могут редактировать / обновлять свои данные. Это решение очень простое в использовании и внедрении. Я с нетерпением жду ваших отзывов. Не стесняйтесь оставить комментарий или запрос ниже. Спасибо!