От автора: эта статья является частью серии под названием «Создание в OpenCart инструмента импорта товаров из CSV». В предыдущей статье мы рассмотрели, как реализовать инструмент импорта, в котором мы создали кнопку импорта и задали внешний шаблон. Сегодня мы узнаем, как напрямую пакетно импортировать данные с компьютера в OpenCart.
Рассмотрим сначала сначала все в целом. В предыдущем руководстве мы реализовали инструмент экспорта, который позволяет пользователю скачивать CSV-списки и изменять их при необходимости. После этого мы создали инструмент импорта, который позволяет загружать / импортировать отредактированный файл / данные. В первой части мы реализовали макет того, как работает в OpenCart импорт. В этой части мы реализуем функционал.
Файл контроллера
В предыдущей части мы создали контроллер, что привело нас к созданию формы загрузки. В файле представления макета у нас было поле загрузки, через которое пользователь может загрузить CSV, как показано ниже:
Откройте файл admin/controller/catalog/product.php. Найдите функцию importCSV(), которую мы создали в предыдущей части.
Добавьте после нее код:
1 |
if (($this->request->server['REQUEST_METHOD'] == 'POST') ) {} |
чтобы данная часть кода выполнялась только в том случае, если через указанную выше форму были отправлены данные.
Внутри вышеуказанного блока кода мы добавим код, который я подробно поясню ниже.
Получение файла
Следующий код открывает представленный CSV-файл и обрабатывает его как файл только для чтения.
1 2 3 4 |
<?php $file = $_FILES['csv']['tmp_name']; $handle = fopen($file,"r"); ?> |
Обработка каждой записи
Теперь нам нужно обработать каждую строку CSV и сохранить в базе данных. Для этого мы будем обрабатывать записи через цикл и сохранять их.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php while ($data = fgetcsv($handle,1000,",","'")) // обработка строки заключается в считывании полей в формате CSV и возвращении массива, содержащего считанные поля. { if ($data[0]!='') // если столбец 1 не является пустым { $this->model_catalog_product->importCsvData($data); // обработка и передача данных в модель } else { // на случай возникновения ошибок сюда помещается код отладки } } ?> |
Перенаправление
После завершения импорта пользователь должен быть перенаправлен, поэтому следующий код перенаправляет пользователя к форме и отображает сообщение об успешном завершении процесса импорта.
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-файл, считывает его данные по строкам и передает их в модель. Теперь нам нужно создать модель, определенную в коде контроллера, которая отвечает за сохранение переданных данных в базу данных.
Файл модели
Откройте файл admin/model/catalog/product.php. Создайте в нем публичную функцию importCsvData($data). Внутри функции модели мы добавим следующий код, содержащий несколько запросов для сохранения данных.
1 2 3 4 5 6 7 8 9 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."'");//обновление количества и марки товара if($name) { $query = $this->db->query("UPDATE `".DB_PREFIX."product_description` SET name='".$this->db->escape($name)."' WHERE product_id='".$product_id."'"); // обновление названия товара } } ?> |
Заключение
Итак, в этой статье мы предоставили полное решение системы экспорта / импорта. С помощью этого инструмента пользователи могут редактировать / обновлять свои данные. Это решение очень просто для использования и реализации. Я с нетерпением жду ваших отзывов. Вы можете оставить свои комментарии или вопросы ниже. Спасибо за внимание!
Автор: Zaman Riaz
Источник: //code.tutsplus.com/
Редакция: Команда webformyself.