Перейти к публикации
  • разработка интернет магазинов на 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 и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.