Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


kolyabis

Recommended Posts

Вот на основе файла от Klausa.

Добавлены плюсом  "Промо Стикеры" и "Преимущества"

з.ы. править надо было только export_import.php но для удобства выкладываю весь модуль Export_Import_3_10_sticker_benefit_descriptionmini.zip

Змінено користувачем AnDes
  • +1 1
Надіслати
Поділитися на інших сайтах


  • 1 month later...
В 22.02.2017 в 20:00, pokryshkin сказал:

в общем не хватало строки в  storeProductIntoDatabase

$sql .= "$vendor_price, $currency_id";

300 лет искал, напишу пригодится

 

вот здесь 

// generate and execute SQL for inserting the product

 

вот в этой строке

$sql .= "'$location',$stock_status_id,'$model',$manufacturer_id,'$image',$shipping,$price,$points,";

 

вставляем $vendor_price, $currency_id

Получаем:

$sql .= "'$location',$stock_status_id,'$model',$manufacturer_id,'$image',$shipping,$price,$vendor_price, $currency_id,$points,";

Змінено користувачем Gumoff
Надіслати
Поділитися на інших сайтах


  • 3 weeks later...

Кто нибудь делал проверку на пустое значение поля, чтобы при импорте в режиме обновлять, пустые значения полей из файла импорта не заменяли заполненные значения в базе данных ?

 

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

Надіслати
Поділитися на інших сайтах


  • 5 weeks later...

Доброго времени суток.

Подскажите пожалуйста, не особо силён в дружбе с sql.

По добавлению полей в опциях, не поддтягивается модель и артикул, при импорте данные поля в опциях затираюся и остаются пустые поля

 

Версия ocStore 2.3.0.2.3, стоят Export/Import Tool (V3.10) for Ocstore 2.x и Export/Import Tool (V3.20) for OpenCart 2.x

Надіслати
Поділитися на інших сайтах


в продолжении своей просьбы, по инструкции дополнил первую часть: 

Цитата

        $sql .= "  p.price,";
        $sql .= "  p.vendor_price,";    //added
        $sql .= "  p.currency_id,";    //added
        $sql .= "  p.points,";

 

Цитата

        $worksheet->getColumnDimensionByColumn($j++)->setWidth(max(strlen('price'),10)+1);
        $worksheet->getColumnDimensionByColumn($j++)->setWidth(max(strlen('vendor_price'),10)+1); //added
        $worksheet->getColumnDimensionByColumn($j++)->setWidth(max(strlen('currency_id'),4)+1); //added
        $worksheet->getColumnDimensionByColumn($j++)->setWidth(max(strlen('points'),5)+1);

 

Цитата

        $data[$j++] = 'price';
        $data[$j++] = 'vendor_price';    //added
        $data[$j++] = 'currency_id';    //added
        $data[$j++] = 'points';

 

Цитата

            $data[$j++] = $row['price'];
            $data[$j++] = $row['vendor_price'];    //added
            $data[$j++] = $row['currency_id'];    //added
            $data[$j++] = $row['points'];

 

Вроде ну не чего гениального и сложного, однако ошибочка)))) 

Цитата

Error: Unknown column 'p.vendor_price' 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.vendor_price, p.currency_id, 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.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 `sw_product` p LEFT JOIN `sw_product_to_category` pc ON p.product_id=pc.product_id LEFT JOIN `sw_url_alias` ua ON ua.query=CONCAT('product_id=',p.product_id) LEFT JOIN `sw_manufacturer` m ON m.manufacturer_id = p.manufacturer_id LEFT JOIN `sw_weight_class_description` wc ON wc.weight_class_id = p.weight_class_id AND wc.language_id=1 LEFT JOIN `sw_length_class_description` mc ON mc.length_class_id=p.length_class_id AND mc.language_id=1 LEFT JOIN `sw_product_related` pr ON pr.product_id=p.product_id GROUP BY p.product_id ORDER BY p.product_id ;

 

Из журнала следует что: 

Цитата

PHP Exception:  Error: Unknown column 'p.vendor_price' in 'field list'<br />Error No: 1054<br />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.vendor_price,  p.currency_id,  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.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 `sw_product` p LEFT JOIN `sw_product_to_category` pc ON p.product_id=pc.product_id LEFT JOIN `sw_url_alias` ua ON ua.query=CONCAT('product_id=',p.product_id) LEFT JOIN `sw_manufacturer` m ON m.manufacturer_id = p.manufacturer_id LEFT JOIN `sw_weight_class_description` wc ON wc.weight_class_id = p.weight_class_id   AND wc.language_id=1 LEFT JOIN `sw_length_class_description` mc ON mc.length_class_id=p.length_class_id   AND mc.language_id=1 LEFT JOIN `sw_product_related` pr ON pr.product_id=p.product_id GROUP BY p.product_id ORDER BY p.product_id ;  in /var/www/vhosts/v-%%%%%.webspace/сайт.ком/system/library/db/mysqli.php on line 40
 

 

 

Надіслати
Поділитися на інших сайтах


  • 9 months later...
  • 1 year later...
  • 9 months later...
В 04.08.2020 в 16:56, anvar1 сказал:

C полями meta_h1, currency_id, main_category. 

Проверен на ocstore 3.0.2.0. 

opencart-3-x-export-import-multilingual-3-22-cloud_re.ocmod.zip 1 \u041c\u0411 · 17 downloads

не работает на експорт товара

1368881811_.thumb.png.8bf673c8ec819cff8a89a34ed5d99c62.png

Надіслати
Поділитися на інших сайтах


  • 3 months later...
В 04.08.2020 в 16:56, anvar1 сказал:

C полями meta_h1, currency_id, main_category. 

Проверен на ocstore 3.0.2.0. 

opencart-3-x-export-import-multilingual-3-22-cloud_re.ocmod.zip 1 \u041c\u0411 · 24 downloads

 Установила. Но модуль нигде не появился. Видно его только в установке расширений. Права все отметила, кеш почистила. Не пойму что не так. Другие варианты модуля становятся без проблем. Помогите советом. Уж очень нужны h1 и валюта.

Надіслати
Поділитися на інших сайтах


В 16.08.2021 в 11:47, lilit25 сказал:

 Установила. Но модуль нигде не появился. Видно его только в установке расширений. Права все отметила, кеш почистила. Не пойму что не так. Другие варианты модуля становятся без проблем. Помогите советом. Уж очень нужны h1 и валюта.

Разобралась. Заработало.

Надіслати
Поділитися на інших сайтах


  • 5 months later...
В 04.08.2020 в 18:56, anvar1 сказал:

C полями meta_h1, currency_id, main_category. 

Проверен на ocstore 3.0.2.0. 

opencart-3-x-export-import-multilingual-3-22-cloud_re.ocmod.zip 1 \u041c\u0411 · 40 downloads

Версия Export/Import Tool 4.11 с переводом и с полями meta_h1, currency_id, main_category. 

Проверен на ocstore 3.0.2.0.

opencart-3-x-export-import-rus-4-11.ocmod.zip

Надіслати
Поділитися на інших сайтах


  • 2 months later...
18.02.2022 в 13:18, anvar1 сказал:

Версия Export/Import Tool 4.11 с переводом и с полями meta_h1, currency_id, main_category. 

Проверен на ocstore 3.0.2.0.

opencart-3-x-export-import-rus-4-11.ocmod.zip 1 \u041c\u0431 · 4 скачивания

При работе с модулем учитываем следующие нюансы: 

Модуль работает в PHP 7.2-7.3 и выше. 

Если уже есть товарные позиции, то может не экспортировать-импортировать, так как могут отсутствовать поля meta_h1, currency_id, main_category. 

Надіслати
Поділитися на інших сайтах


  • 7 months later...

Кому полезно добавлены только поля meta_h1 для Version 3.0.3.7

 

export_import.php

Надіслати
Поділитися на інших сайтах


  • 7 months later...
04.08.2020 в 13:56, anvar1 сказал:

C полями meta_h1, currency_id, main_category. 

Проверен на ocstore 3.0.2.0. 

opencart-3-x-export-import-multilingual-3-22-cloud_re.ocmod.zip 1 \u041c\u0431 · 50 скачиваний

anvar1 , а есть по отдельности варианты? можешь по отдельности скинуть...

Надіслати
Поділитися на інших сайтах


05.08.2023 в 19:53, Maksikus сказал:

anvar1 , а есть по отдельности варианты? можешь по отдельности скинуть...

Нет вариантов по отдельности. В теме есть инструкция по которой можно допилить для своих нужд.

Надіслати
Поділитися на інших сайтах


Мысли вслух:
- почему в этой теме все пытаются впихнуть свои наработки, в:
- основной файл модуля:
admin/model/extension/export_import.php
- а не напишут ocmod по каждую конкретную задачу...
- и ещё придумывать свои версии данного файла... :)
Забавно...

Змінено користувачем Maksikus
PS
  • +1 1
Надіслати
Поділитися на інших сайтах


  • 2 years later...

Добрый вечер! Я просто не мог не поделиться своей радостью и своим модификатором, учитывая сколько времени "убил" на его создание с помощью Gemini. Что я только не делал - и отправлял ему файл export_import.php кучу раз, и структуру и примеры строк таблицы oc_product, и бесконечные ошибки из лога opencart... Ничего не получалось, не мог он никак сообразить до конца где что на что менять и добавлять, хотя логика у него была правильная... в итоге плюнул и сам внимательно стал изучать как устроен файл export_import.php. Менять его мне не хотелось изначально, а хотелось сделать полноценный модификатор ocmod с установкой и видимостью в админ-панели. 

 

Я открыл по-олдскульному файл export_import.php, нашёл все места, где встречалось слово location и проследил построчно что откуда берётся и что куда вставляется )) Почему именно location? Да просто потому что это одно из текстовых стандартных полей таблицы oc_product, в котором также было и моё нестандартное поле video, которое в свою очередь по умолчанию и не экспортировалось/импортировалось модулем Export/Import Tool (V4.17.9) for OpenCart 3.x. Кстати я использую версию ocStore 3.0.3.7

 

Когда я разобрался с полем location, то на всякий случай ещё проследил как работают другие jan, image_name, model - более-менее стало понятно куда и какие строки в коде нужно добавить, а какие заменить, чтобы в конечном экспортируемом файле XLSX появилась новая колонка video, в которой будут храниться строки из столбца video таблицы oc_product моей базы данных. Ну, и само-собой, чтоб наоборот при импорте всё обратно из XLSX грузилось в БД. Получился довольно простой симпатичный модификатор, в котором я в комментариях очень подробно расписал где что как и почему я добавлял или заменял.

 

P.S. Добавлю напоследок, что ошибка Gemini была в том, что он пытался менять фрагменты строк или sql-запросов, а я пошёл другим путём (кстати спасибо Maksikus , именно его стиль и модификатор я брал как основу, там ищутся и заменяются в основном целые строки, блоки или переменные целиком, а также удобный стиль оформления кода, чтобы не запутаться). А вот Gemini путался из-за разных отступов, пробелов, переносов строк и пр... А вообще "ему" тоже спасибо и респект за подсказки и идеи где копать.

И ещё надо быть очень внимательным к кодировке файла install.xml , тегам (особенно <code>) и комментариям внутри, названию и версиям своего ocmod, упаковке в архив .ocmod.zip для загрузки, чистке кеша, проверке журнала логов в модификаторах после установки и пр. Всем желаю успехов. Надеюсь, мой пост и мод пригодится и сэкономит кучу времени! Привожу код полностью ниже, а во вложении - полноценный архив, который можно поставить через установку расширений в админ-панели

 

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Export/Import Tool - Add Video Column v007</name>
    <code>Add_video_column_export_import_tool_v007</code>
    <version>007</version>
    <author>Sergey</author>

<!--
Описание:
- Добавление допополнительного столбца video в экспортируемый файл XLSX,
    т.к. стандарный модуль игорирует нестандартные поля.
    Также чтение этого поля из XLSX при импорте в БД.
    Колонка video создаётся в таблице oc_product БД для хранения ссылки и описания
    ПЕРВОГО видео по аналогии с первым фото в image -
    модулем Видео Youtube на странице товара - https://https://opencartforum.com/files//xprolance

Изменение в файле:
    admin/model/extension/export_import.php - Export/Import Tool (V4.17.9)

За основу берём по всему коду привязку к полю и переменной для "location", т.к. это
1) аналогичный текстовый столбец только (!) в таблице БД oc_product
2) его удобно искать и ориентироваться по нему где что куда вставлять и заменять
3) если взять к примеру поле image , то оно встречается ещё в куче ненужных нам функций,
таблицах и пр. Помимо этого может возникнуть путаница, т.к. в таблице БД oc_product оно
называется "image",а в XLSX - "image_name"

Хотя своё поле video в XLSX я задумал вставить именно справа (следом) с "image_name" !!!
Поэтому порой придётся учитывать этот момент, особенно когда перебор колонок в XLSX
-->

    <file path="admin/model/extension/export_import.php">

        <!-- здень ничего не меняем, т.к. этот "Location" вообще никак не связан с нашей темой!
        <operation>
        <search><![CDATA[
        header('Location: ' . str_replace(array('&amp;', "\n", "\r"), array('&', '', ''), $link));
        ]]></search>
        </operation>
        -->

        <!-- в этом месте кода по аналогии с $location создаём переменную $video -
        в которую запишем "очищенное = экранированное" значение из массива $product -->
        <operation><!-- 1042 - storeProductIntoDatabase -->
            <search><![CDATA[
            $location = $this->db->escape($product['location']);
            ]]></search>
            <add position="after"><![CDATA[
            $video = $this->db->escape($product['video']);
            ]]></add>
        </operation>

        <!-- Теперь ту переменную $video используем в SQL - запросе для импорта в таблицу
        БД по аналогии опять же с "location". Для этого заменяем всю строку - так проще
        Последовательность и название полей имеет значение -->
        <operation><!-- 1065 - storeProductIntoDatabase -->
            <search><![CDATA[
            $sql .= "`location`,`stock_status_id`,`model`,`manufacturer_id`,`image`,`shipping`,`price`,`points`,`date_added`,`date_modified`,`date_available`,`weight`,`weight_class_id`,`status`,";
            ]]></search>
            <add position="replace"><![CDATA[
            $sql .= "`location`,`stock_status_id`,`model`,`manufacturer_id`,`image`,`video`,`shipping`,`price`,`points`,`date_added`,`date_modified`,`date_available`,`weight`,`weight_class_id`,`status`,";
            ]]></add>
        </operation>

        <operation><!-- 1072 - storeProductIntoDatabase -->
            <search><![CDATA[
            $sql .= "'$location',$stock_status_id,'$model',$manufacturer_id,'$image',$shipping,$price,$points,";
            ]]></search>
            <add position="replace"><![CDATA[
            $sql .= "'$location',$stock_status_id,'$model',$manufacturer_id,'$image','$video',$shipping,$price,$points,";
            ]]></add>
        </operation>

        <!-- Здесь идёт именно вставка в таблицу XLSX по порядку. Я хочу, чтобы video
        было вставлено справа от image_name, поэтому привязываюсь именно к $image_name
        Можно было "привяться" и к $location = $this->getCell($data,$i,$j++,'');
        в строке 1344 и отступить 4 строки вниз, но отступы - хрупкая конструкция
        в случае обновления модуля или изменения самого кода файла, например.
        Даже одна новая пустая строка и всё может поплыть, а так - всё чётко вставится,
        сразу после $image_name! -->
        <operation><!-- 1348 - uploadProducts -->
            <search><![CDATA[
            $image_name = $this->getCell($data,$i,$j++);
            ]]></search>
            <add position="after"><![CDATA[
            $video = $this->getCell($data,$i,$j++);
            ]]></add>
        </operation>

        <!-- здесь идёт просто объявление переменных и запись их в массив $product[],
        поэтому для удобства поиска по коду опять привяжемся к location и по аналогии
        вставим значение из переменной $video в массив $product[] -->
        <operation><!-- 1463 - uploadProducts -->
            <search><![CDATA[
            $product['location'] = $location;
            ]]></search>
            <add position="after"><![CDATA[
            $product['video'] = $video;
            ]]></add>
        </operation>

        <!-- далее по коду у нас есть функция объединения массивов - для проверки товаров
        Проще заменить всю строку, добавив в неё в нужном месте video по аналогии с location -->
        <operation><!-- 4054 - validateProducts -->
            <search><![CDATA[
            $expected_heading = array_merge( $expected_heading, array( "location", "quantity", "model", "manufacturer", "image_name", "shipping", "price", "points", "date_added", "date_modified", "date_available", "weight", "weight_unit", "length", "width", "height", "length_unit", "status", "tax_class_id", "description") );
            ]]></search>
            <add position="replace"><![CDATA[
            $expected_heading = array_merge( $expected_heading, array( "location", "quantity", "model", "manufacturer", "image_name", "video", "shipping", "price", "points", "date_added", "date_modified", "date_available", "weight", "weight_unit", "length", "width", "height", "length_unit", "status", "tax_class_id", "description") );
            ]]></add>
        </operation>

        <!-- Аналогичная замена переменной $expected_heading. В коде это всё делается
        для проверки версии OpenCart, наличия "seo_keyword", но нам это не суть важно.
        Раз здесь еcть location, то и наш video по аналогии вставляем -->
        <operation><!-- 4056 - validateProducts -->
            <search><![CDATA[
            $expected_heading = array_merge( $expected_heading, array( "location", "quantity", "model", "manufacturer", "image_name", "shipping", "price", "points", "date_added", "date_modified", "date_available", "weight", "weight_unit", "length", "width", "height", "length_unit", "status", "tax_class_id", "seo_keyword", "description") );
            ]]></search>
            <add position="replace"><![CDATA[
            $expected_heading = array_merge( $expected_heading, array( "location", "quantity", "model", "manufacturer", "image_name", "video", "shipping", "price", "points", "date_added", "date_modified", "date_available", "weight", "weight_unit", "length", "width", "height", "length_unit", "status", "tax_class_id", "seo_keyword", "description") );
            ]]></add>
        </operation>

        <!-- Здесь идёт именно извлечение из таблицы XLSX по порядку. Поскольку video
        по моей задумке должно быть справа от image_name, то привязываюсь именно
        к $sql .= "  p.image AS image_name,";
        Можно было "привяться" и к $sql .= "  p.location,"; в строке 6793 и отступить
        4 строки вниз, но это хрупкая конструкция на будущее -->
        <operation><!-- 6797 - getProducts -->
            <search><![CDATA[
            $sql .= "  p.image AS image_name,";
            ]]></search>
            <add position="after"><![CDATA[
            $sql .= "  p.video,";
            ]]></add>
        </operation>

        <!-- В этих строках уставливается ширина колонки в XLSX.
        По аналогии с image_name устанавливаем ниже ширину и для video,
        причём сразу же после image_name, ведь перебор колонок в XLSX идёт по порядку! -->
        <operation><!-- 6924 - populateProductsWorksheet -->
            <search><![CDATA[
            $worksheet->getColumnDimensionByColumn($j++)->setWidth(max(strlen('image_name'),12)+1);
            ]]></search>
            <add position="after"><![CDATA[
            $worksheet->getColumnDimensionByColumn($j++)->setWidth(max(strlen('video'),12)+1);
            ]]></add>
        </operation>

        <!-- ниже в этой же функции вставки данных из таблицы (точнее, таблиц) БД в XLSX
        идёт формирование заголовков и стиль (формат) строк - текст, вес, цена и пр.
        По аналогии с "image_name" и сразу после него делаем и для "video" - текстовый формат и
        название колонки -->
        <operation><!-- 7007 - populateProductsWorksheet -->
            <search><![CDATA[
            $data[$j++] = 'image_name';
            ]]></search>
            <add position="after"><![CDATA[
            $styles[$j] = &$text_format;
            $data[$j++] = 'video';
            ]]></add>
        </operation>

        <!-- Здесь идёт непосредственно вставка значений в строки XLSX по порядку
        в зависимости от ключа массива $row (он же $products). Поэтому опять привязываемся
        к колонке image_name, и после того как из неё все строки вставили, переходим
        к следующей по порядку колонке video, берем значения и вставляем по очереди в строки -->
        <operation><!-- 7097 - populateProductsWorksheet -->
            <search><![CDATA[
            $data[$j++] = $row['image_name'];
            ]]></search>
            <add position="after"><![CDATA[
            $data[$j++] = $row['video'];
            ]]></add>
        </operation>

    </file>

</modification>

 

video-column-add-export-import-tool-v007.ocmod.zip

Змінено користувачем Sereke
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
Гість
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.