В нашем последнем уроке мы обсуждали, как реализовать инструмент импорта, в котором мы создали кнопку импорта и ее внешний интерфейс. Сегодня мы узнаем, как напрямую импортировать объемные данные с наших компьютеров в нашу систему OpenCart.
Давайте сначала рассмотрим иерархию. В предыдущем уроке мы реализовали инструмент экспорта, который позволяет пользователю загружать таблицы CSV и при необходимости чередовать их. После этого мы внедрили инструмент импорта, который позволяет пользователю загружать / импортировать отредактированный файл / данные. Ранее мы реализовали макет. В этой статье мы реализуем функциональность.
1. Файл контроллера
В нашем последнем уроке мы создали контроллер, который подталкивает нас к макету формы загрузки. В файле представления макета у нас был вход для загрузки, где пользователь может загрузить CSV, как показано ниже:
- Перейдите к
admin/controller/catalog/product.php
. - Найдите
importCSV()
, которую мы создали в предыдущем уроке. - Поставьте
if (($this->request->server['REQUEST_METHOD'] == 'POST') ) {}
после него, чтобы гарантировать, что часть кода будет выполнена только при условии отправки вышеуказанной формы. - Внутри вышеприведенного блока кода мы добавим код, поясняемый шаг за шагом.
1.1 Получение файла
Следующий код открывает отправленный файл CSV и обрабатывает его только для чтения.
1
2
3
4
|
<?php
$file = $_FILES[‘csv’][‘tmp_name’];
$handle = fopen($file,»r»);
?>
|
1.2 Пройдите через каждую запись
Теперь нам нужно пройти через каждый ряд 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.3 Перенаправление
После завершения импорта пользователь должен быть перенаправлен, поэтому следующий код перенаправляет пользователя в форму и выдает сообщение об успехе.
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, читает данные по строкам и анализирует их в модели. Теперь нам нужно создать модель, как определено в коде контроллера, которая отвечает за сохранение проанализированных данных в БД.
2. Файл модели
- Перейдите к
admin/model/catalog/product.php
. - Создайте там публичную функцию с именем
importCsvData($data)
. - Внутри функции модели мы добавим этот код, который содержит несколько запросов для сохранения данных.
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.»‘»);
}
}
?>
|
Вывод
Итак, сегодняшний урок посвящен предоставлению полного решения для системы экспорта / импорта. Мы предлагаем такое решение, в котором пользователи могут редактировать / обновлять свои данные. Это решение очень простое в использовании и внедрении. Я с нетерпением жду ваших отзывов. Не стесняйтесь оставить комментарий или запрос ниже. Спасибо!