Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

ocStore 2 Export/Import Tool (V3.7) добавление своих полей


kolyabis
 Поделиться

Рекомендованные сообщения

Добрый день всем. Решил написать данную тему, может кому то поможет, так как сам искал данную возможность, но как так получилось что либо те кто делал подобное не хочет делится секретами либо просто не отвечают на вопросы.

 

Суть моей задачи заключалась в том что надо было сделать динамический пересчет курса валют 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") );

 

Ну вот в принципе и все.

Извините если не очень детально или не все методы показал, но если вам надо только делать Импорт/Экспорт товаров, то этот вариант работает.

 

 

  • +1 6
Ссылка на комментарий
Поделиться на других сайтах


  • 3 месяца спустя...

экспорт заработал, а при импорте вылетает ошибка 

Error: Column count doesn't match value count at row 1 Error No: 1136 INSERT INTO `oc_product` 

 

Ссылка на комментарий
Поделиться на других сайтах


для желающих выкладываю архив модуля и отдельно рабочий модифицированный export_import.php . В него добавлены 4-ре дополнительных поля `promo_stamp_on`,`promo_stamp`,`promo_txt_stamp_text`,`promo_shadow` . Переименуйте по всему файлу на имена своих полей и замените оригинальный export_import.php

export_import_39.ocmod.zip

export_import - mod.php

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


Error: Unknown column 'p.short_description' in 'field list'

Error No: 1054
SELECT p.product_id, GROUP_CONCAT( DISTINCT CAST(pc.category_id AS CHAR(11)) SEPARATOR "," ) AS categories, p.sku, p.upc, p.ean, p.jan, p.isbn, p.mpn, p.location, p.quantity, p.model, m.name AS manufacturer, p.image AS image_name, p.shipping, p.price, p.points, p.date_added, p.date_modified, p.date_available, p.weight, wc.unit AS weight_unit, p.length, p.width, p.height, p.short_description, p.main_description1, p.main_description2, p.main_description3, p.main_description4, p.main_description5, p.status, p.tax_class_id, p.sort_order, ua.keyword, p.stock_status_id, mc.unit AS length_unit, p.subtract, p.minimum, GROUP_CONCAT( DISTINCT CAST(pr.related_id AS CHAR(11)) SEPARATOR "," ) AS related FROM `oc_product` p LEFT JOIN `oc_product_to_category` pc ON p.product_id=pc.product_id LEFT JOIN `oc_url_alias` ua ON ua.query=CONCAT('product_id=',p.product_id) LEFT JOIN `oc_manufacturer` m ON m.manufacturer_id = p.manufacturer_id LEFT JOIN `oc_weight_class_description` wc ON wc.weight_class_id = p.weight_class_id AND wc.language_id=1 LEFT JOIN `oc_length_class_description` mc ON mc.length_class_id=p.length_class_id AND mc.language_id=1 LEFT JOIN `oc_product_related` pr ON pr.product_id=p.product_id WHERE p.product_id BETWEEN 1001 AND 1007 GROUP BY p.product_id ORDER BY p.product_id ;

 

 

вот такая ошибка при экспорте получилась после того как переделал свой  файл по примеру export_import - mod.php

Изменено пользователем newweb
Ссылка на комментарий
Поделиться на других сайтах


newweb, у меня ocstore 2.3 может есть разница? Раз у меня работает связка модуль + mod значит или Вы неправильно переделали или не подходит версия

Ссылка на комментарий
Поделиться на других сайтах


16 часов назад, pokryshkin сказал:

newweb, у меня ocstore 2.3 может есть разница? Раз у меня работает связка модуль + mod значит или Вы неправильно переделали или не подходит версия

Уже раз десять переделывал, даже просто файл export_import (с вашеми значениями подставлял) ничего не вышло, та же ошибка только с названием др. переменной. Похоже в ocStore 2.1.0.2.1 не работает этод метод (((. А может в БД чего не так сделал? В любом случае спасибо за инфу. Буду рыть дальше. Если чего получится скину в эту тему.

Ссылка на комментарий
Поделиться на других сайтах


В общем ещё немного помучился и переделал модуль версии 3.5 для ocStore 2.1.0.2.1 добавил туда 6-ть новых полей (short_description, main_description1, main_description2, main_description3, main_description4, main_description5). Выкладываю сам модуль и файл переделанный под него (нужно заменить в данном модуле /admin/model/tool/export_import.php).

export-import.ocmod.zip

export_import.php

Ссылка на комментарий
Поделиться на других сайтах


  • 3 недели спустя...

подобным методом возможно добавить столбцы дополнительных фото к товару ?

Имеющиеся вкладка в таблице не очень удобна менеджеру.

Ссылка на комментарий
Поделиться на других сайтах


  • 1 месяц спустя...

Ребята а как сделать теже манипуляции только мне надо выгрузить скидку с дополнительной таблици sql, выручайте плиз costaslab игнорирует просьбы допилить CSV Price Pro под импорт/экспорт дополнительной таблицы с скидками !

Ссылка на комментарий
Поделиться на других сайтах


  • 2 месяца спустя...
  • 1 месяц спустя...

Как допилить дополнительные колонки я разобрался,  

но мне необходимо выгружать и загружать дополнительный лист из таблицы oc_product_related,

с видом 

и проверкой по product_id

 

может кто-то поможет допилить?

Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...
On 26.02.2017 at 11:28 AM, newweb said:

В общем ещё немного помучился и переделал модуль версии 3.5 для ocStore 2.1.0.2.1 добавил туда 6-ть новых полей (short_description, main_description1, main_description2, main_description3, main_description4, main_description5). Выкладываю сам модуль и файл переделанный под него (нужно заменить в данном модуле /admin/model/tool/export_import.php).

export-import.ocmod.zip

export_import.php

При импорте ошибка в логе написано так -- 2017-08-12 17:24:56 - Недопустимый заголовок в Товаре(Product) файла импорта

использовал одно поле short_description переименовал его в mini_description как и в БД остальные убрал

Изменено пользователем sept30
Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...
В 04.08.2017 в 10:42, mihas89 сказал:

Как допилить дополнительные колонки я разобрался,  

но мне необходимо выгружать и загружать дополнительный лист из таблицы oc_product_related,

с видом 

и проверкой по product_id

 

может кто-то поможет допилить?

Тоже нужно доработать импорт и экспорт для сопутствующих товара (рекомендованных). Кто нибудь доработал модуль для такой функции

Ссылка на комментарий
Поделиться на других сайтах


  • 3 недели спустя...

Люди добрые подскажите, кто-нибудь добавлял пункт description_mini? Как сделать, можете объяснить подробно или дать готовый файл export с этим полем?

Выше выложенные файлы export_import.php после их интеграции на движок opencart-cms.ru 2.3 ломают вход в модуль, выдается ошибка Notice: Undefined property: Proxy::getMinCustomerId in /home/h/hyhy88/test.dogjoy.ru/public_html/admin/controller/tool/export_import.php on line 347

Ссылка на комментарий
Поделиться на других сайтах


  • 4 недели спустя...

Написал подробную инструкцию по добавлению своего поля https://netsh.pp.ua/2017/09/export-import-tool-custom-fields/

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

Всем привет.

А если я наоборот хочу упростить выгрузку/загрузку, то достаточно ли удалить запросы по этому же принципу?

например, мне не нужно выгружать и редактировать поле SKU, то, правильно я понимаю, что нужно удалить все запросы, содержащие SKU в этом файле?

Повлияет ли это на удаление/добавление товаров через Excel ?

 

Почитал "подробную инструкцию" iMateo - ничего подробного не увидел. Все сводится Находим-меняем. Без объяснения зачем и почему.

Здесь всё намного подробней расписано. Спасибо kolyabis.

Ссылка на комментарий
Поделиться на других сайтах


  • 3 недели спустя...

Вообще не понимаю я этих проблем: авторы сборок могли бы давно написать автору плагина — он с удовольствием дописывает свой модуль под конкретные задачи.

Если раскидать стоимость доработки на всех страждущих — получатся копейки.

Ссылка на комментарий
Поделиться на других сайтах


  • 2 месяца спустя...

Коллеги, подскажите пожалуйста, куда копать?

В общем решил я добавить поле description_mini, всё сделал по аналогии с расположением поля meta_description для товара
Добавлял всё только для товара (там, где в начале product)
Модуль работает на экспорт отлично, для двух языков выводит это доп описание товара
А вот при импорте ругается на
2018-01-23 22:59:42 - Export/Import: Invalid header in the Products worksheet

В заголовках есть же эти поля, добавились по аналогии с этими:
meta_description(ru-ru)    meta_description(ua-ua)
вот эти 2 поля
description_mini(ru-ru)    description_mini(ua-ua)

Что ему не так?


Буду признателен за подсказку

Изменено пользователем RespectS
Ссылка на комментарий
Поделиться на других сайтах


Перерыл весь код, нашел две ошибки, пропустил букву S в слове description 
Исправил, уже, перезалил, кеш почистил, модификаторы обновил
Файл экспортируется с данными нового поля, но... не импортирует - ругается на заголовок страницы, т.е. я так понимаю - ему не нравится, что добавилось 2 поля новых

Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...

В примере рассмотрено добавление нового поля в таблицу oc_product. А если нужно добавить новое поле в таблицу oc_product_option_value? Есть ли подобная инструкция? Заранее благодарю!

Ссылка на комментарий
Поделиться на других сайтах


В 05.02.2018 в 15:30, Alli2 сказал:

В примере рассмотрено добавление нового поля в таблицу oc_product. А если нужно добавить новое поле в таблицу oc_product_option_value? Есть ли подобная инструкция? Заранее благодарю!

Ищите в файле значение weight_prefix, оно уникально для этой вкладки и везде после него прописываете свои поля, по аналогии с ним или другими полями из этой вкладки.

Ссылка на комментарий
Поделиться на других сайтах


  • 3 недели спустя...
В 08.09.2017 в 23:43, hyhy88 сказал:

Люди добрые подскажите, кто-нибудь добавлял пункт description_mini? Как сделать, можете объяснить подробно или дать готовый файл export с этим полем?

Выше выложенные файлы export_import.php после их интеграции на движок opencart-cms.ru 2.3 ломают вход в модуль, выдается ошибка Notice: Undefined property: Proxy::getMinCustomerId in /home/h/hyhy88/test.dogjoy.ru/public_html/admin/controller/tool/export_import.php on line 347


Вот делал под OCSMS 2.3 - здесь добавлено поле description_mini в товаре и description_bottom в категориях
export_import.php

Пытаюсь добавить ещё дополнительные базы (oc_sticker,  oc_benefit и oc_benefit_description) Создаётся впечатление, что правки одного export_import.php в этом случае недостаточно. Вроде я в него всё грамотно вставил, но при экспорте выходит ошибка  Undefined index
Кто подскажет куда мне дальше ковырять?
 

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.