Добрый день всем. Решил написать данную тему, может кому то поможет, так как сам искал данную возможность, но как так получилось что либо те кто делал подобное не хочет делится секретами либо просто не отвечают на вопросы.
Суть моей задачи заключалась в том что надо было сделать динамический пересчет курса валют c $ или ЕВРО в гривны. По началу думал написать модуль, но потом подумал что уже куча написанных модулей по конвертации валют, они правда платные, но стоят не очень дорого. Но я решил расширить функционал OpenCart, а именно карточку товара и общий список. За основу взял материал Мультивалютность Opencart (OCstore)
Далее я столкнулся с тем что надо загружать массово товары через Export/Import Tool, но при Экспорте или Импорте, OpenCart ничего не знает о расширенной форме карточки товара, по этому я полез в модуль Export/Import Tool (V3.7).
ДОБАВЛЕНИЕ СВОИХ ПОЛЕЙ В МОДУЛЬ.
Правда я тестировал только на данной версии модуля, но они все практически одинаковые, по этому принцип будет аналогичным.
В данном модуле есть файл ( export_import.php ) он находится по пути ( admin/model/tool/export_import.php ) данный файл мы и будем редактировать. У меня данный файл достигает 8500 строк кода, по этому буду описывать по порядку.
Первым делом мы понимает что нам надо будет создавать файл формата ( xlsx ), то есть Exel для Export данных.
В файле находим метод ( getProducts ) в котором надо добавить те поля которые добавлялись в таблицу ( oc_product ). В моем случае я добавлял ( vendor_price и currency_id ).
В методе ( getProducts ) приблизительно на строке 6002. Я добавил в запрос который забирает данные с таблицы свои поля.
/* НАЧАЛО Свои поля для импорта/экспорта */
$sql .= " p.vendor_price,";
$sql .= " p.currency_id,";
/* КОНЕЦ Свои поля для импорта/экспорта */
Далее у нас следующий метод ( populateProductsWorksheet ) на строке 6100. Тут мы тоже должны указать наши поля.
/* ********************** НАЧАЛО Свои поля для импорта/экспорта *********************** */
$worksheet->getColumnDimensionByColumn($j++)->setWidth(max(strlen('vendor_price'),10)+1);
$worksheet->getColumnDimensionByColumn($j++)->setWidth(max(strlen('currency_id'),4)+1);
/* *********************** КОНЕЦ Свои поля для импорта/экспорта *********************** */
/* ********************** НАЧАЛО Свои поля для импорта/экспорта *********************** */
$data[$j++] = 'vendor_price';
$data[$j++] = 'currency_id';
/* *********************** КОНЕЦ Свои поля для импорта/экспорта *********************** */
/* *********************************************** */
$data[$j++] = $row['vendor_price'];
$data[$j++] = $row['currency_id'];
/* *********************************************** */
Эти строки нужны для того чтоб модуль узнал что у нас добавились 2-а поля которые будут выгружаться в Ексель файл. Для выгрузки больше ничего не надо.
Теперь надо нам с файла загружать товары в магазин, за это отвечают другие методы. Для этого нам надо этим методам объяснить что у нас есть новые поля.
Находим метод ( storeProductIntoDatabase ), приблизительно на строке 793 и в него вписываем наши поля
/* ********************************************************* */
$vendor_price = trim($product['vendor_price']);
$currency_id = $product['currency_id'];
/* ********************************************************* */
Ниже мы указываем эти поля в запросе к базе.
$sql .= "`location`,`stock_status_id`,`model`,`manufacturer_id`,`image`,`shipping`,`price`,`vendor_price`,`currency_id`,`points`,`date_added`,`date_modified`,`date_available`,`weight`,`weight_class_id`,`status`,";
Далее мы ищем метод ( uploadProducts ) приблизительно на строке 1033 и мы вставляем наши поля по аналогии с данным методом
/* *********************************************** */
$vendor_price = $this->getCell($data,$i,$j++,'0.00');
$currency_id = $this->getCell($data,$i,$j++,'0');
/* *********************************************** */
/* *********************************************** */
$product['vendor_price'] = $vendor_price;
$product['currency_id'] = $currency_id;
/* *********************************************** */
И нам осталось только одно.
Ищем метод проверки полей ( validateProducts ) приблизительно на 3636 строке.
$expected_heading = array_merge( $expected_heading, array( "location", "quantity", "model", "manufacturer", "image_name", "shipping", "price", "vendor_price", "currency_id", "points", "date_added", "date_modified", "date_available", "weight", "weight_unit", "length", "width", "height", "length_unit", "status", "tax_class_id", "seo_keyword", "description") );
Ну вот в принципе и все.
Извините если не очень детально или не все методы показал, но если вам надо только делать Импорт/Экспорт товаров, то этот вариант работает.