Импорт товаров и создание модуля для Opencart +

Импорт товаров и создание модуля для Opencart

Очень часто владелец магазина Opencart сталкивается с проблемой массового импорта товаров. Как таковых действительно стоящих бесплатных решений для импорта из Exel или CSV очень мало, или они могут решить далеко не весь спектр задач. Здесь проблема стоит глобальная, выбор расширений не слишком широк, и поэтому при создании магазинов как законченных проектов всегда приходится что-то допиливать самостоятельно.

Следует заметить, что, opencart очень удобна не только в плане администрирования, но и программирования под нее; построена на принципах MVC, и позволяет с меньшими временными затратами, чем на других платформах реализовать необходимый функционал.
Недавно мне была поставлена задача реализовать импорт товаров из txt файлов. После этого родилась идея написать о создании модуля под opencart, сам модуль будет мало кому интересен так как выполняет функциональность, разработанную под конкретные требования.

Как в любой MVC-based системе, существуют некоторые правила создания модулей. И самое первое условие – это наличие файлов контроллера, шаблона, модели и языков, как в разделе сайта admin, так и, если необходимо выполнять вывод во фронтенде – в разделе catalog.
Перечень обязательных файлов в разделе admin:
admin/controller/module/your_module.php
admin/model/module/your_module.php
admin/language/language_folder/module/your_module.php
admin/view/template/your_module.tpl
Перечень обязательных файлов в разделе catalog:
catalog/controller/module/ your_module.php
catalog/language/language_folder/module/your_module.php
catalog/view/theme/default/template/module/your_module.tpl
Language_folder – здесь подставляется соответствующее название папки с языковыми файлами, например russian, english.
В файле controller.php обязательно должен быть объявлен класс контроллера модуля с именем
ControllerНазваниеПапкиМодуляНазваниеФайлаМодуля, например: ControllerModuleAccount. Класс контроллера модуля расширяет класс Controller:
class ControllerModuleAccount extends Controller {
                private $error = array();
                public function index() {
}
}
Файл контроллера (раздел сайта controller) выполняет функцию связи модели (обработка информации) и представления (view).
Внутри функции index() обычно объявляются следующие методы:
class ControllerModuleAccount extends Controller {
                private $error = array();
                public function index() {
                $this->load->language(‘module/account’);
                $this->document->setTitle($this->language->get(‘heading_title’));
                $this->load->model(‘ module/account’);
                 }
}
Соответственно, первой строкой идет загрузка файла языка, далее устанавливается заголовок страницы в админ панели (тот, который находится внутри тегов <title></tltle> html страницы). Следом – подгрузка файла модели – главная часть скрипта, выполняет обработку информации.
В файлах языков делают перевод части скрипта (сообщений), которая выводится пользователю (это носит необязательный характер, если скрипт разрабатывается под собственные нужды, но будет правильнее оформить с использованием этой возможности, на случай, если вы захотите в будущем расширить функциональность или выложить модуль в открытый доступ). Этот файл создавать необязательно. Переменные в admin/language/language_folder/module/your_module.php объявляются вот таким способом:
$_[‘heading_title’]    = ‘Импорт Товаров’;
Чтобы вывести переменную в шаблоне, ее нужно вызвать в файле контроллера:
$this->data[‘peremennaya’] = $this->language->get(‘heading_title’);
где ‘peremennaya’ вызывается в файле шаблона как $peremennaya.
В файле модели объявляется базовый класс для модуля. Напомню, файл модели находится по адресу: корневая_директория_сайта/admin/model/module/account.php.
class ModelНазваниеПапкиНазваниеФайлаМодуля extends Model {
ваш код;
}
Для вызова модели используют примерно следующую функцию в контроллере:
$переменная-контейнер = $this->model_папкаМодуля_файлМодуля->YourFunction(параметры);
где YourFunction – объявленная функция в ранее указанном классе модели нашего модуля (class ModelНазваниеПапкиНазваниеФайлаМодуля).
При создании модуля необходимо помнить о кодировке файлов – для корректной работы с русским языком необходимо использовать UTF-8. Файлы языков также должны быть в одной и той же кодировке (нельзя чтобы английский был например ANSI а русский – UTF8).
Теперь об импорте товаров из файлов. Охватить всю тему полностью в рамках статьи невозможно, но постараюсь изложить основные моменты :).
При импорте файлов необходимо в первую очередь определить кодировку файла. В сети существует несколько способов для
определения кодировки символов. Об этом будет отдельная статья. Для разбора контента файла может использоваться множество разных наборов функций.
Для меня логичнее было произвести разбиение текста сначала на строки (fgets()), затем – на подстроки, с использованием разделителя (strops()). Эти функции – как рабочие лошадки, выполняют самую полезную часть, но для того чтобы скрипт работал необходимо учесть множество нюансов. И конечно не пожалеть времени на разработку алгоритма. Для разбора файла csv существует такая полезная функция – fgetcsv().
Напоследок, расскажу вам об универсальном модуле импорта товаров из CSV — CSV RAW IMPORT 1.5.x. Выполняет импорт и делает бэкап таблиц базы, в том числе описание товаров. Как известно, вся информация о товарах находится в mysql базе. Каждая колонка в импортируемом файле имеет название соответствующих полей в таблицах базы. Залезьте в phpmyadmin и сразу все поймете 🙂
Вы можете оставить комментарий, или поставить трэкбек со своего сайта.

Нет комментариев

(Обязательно)
(Обязательно, не публикуется)

Скажи мне кто такой Билл Гейтс, и я скажу кто ты
Купить в рассрочку

Получить кредит просто! Заполни форму и получи кредит не выходя из дома под 1.99% месяц
Мы свяжемся с вами в течении часа в рабочее время




×
Купить в рассрочку

Получить кредит просто! Заполни форму и получи кредит не выходя из дома под 1.99% месяц
Мы свяжемся с вами в течении часа в рабочее время




×
Яндекс.Метрика