[4.9.2.SP1] Модуль CommerceML "Синхронизация расположения товаров в категориях при обмене 1С с сайтом"

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

Если закомментировать участок кода приведенный ниже, то при воспроизведении выше описанного процесса - товар на сайте будет успешно переноситься из одной категории в другую.

файл: RusEximCommerceml.php

функция: dataProductFile

    // if (!empty($product_id)) {
    //     $product['category_ids'] = $this->db->getColumn(
    //         'SELECT category_id FROM ?:products_categories WHERE product_id = ?i',
    //         $product_id
    //     );

    //     if (empty($product['main_category'])) {
    //         $g_category_id = $this->db->getField(
    //             'SELECT category_id FROM ?:products_categories WHERE product_id = ?i AND link_type = ?s',
    //             $product_id,
    //             'M'
    //         );

    //         if (!$g_category_id) {
    //             $g_category_id = $category_id;
    //         }
    //     }

    //     if ($category_id == 0) {
    //         $category_id = $this->db->getField(
    //             'SELECT category_id FROM ?:products_categories WHERE product_id = ?i',
    //             $product_id
    //         );

    //         $category_id = $this->db->getField(
    //             'SELECT category_id FROM ?:categories WHERE category_id = ?i AND company_id = ?i',
    //             $category_id,
    //             $this->company_id
    //         );

    //         if (!empty($g_category_id)) {
    //             $category_id = $g_category_id;
    //         }
    //     }
    // }

Это стандартное поведение обмена данными между интернет-магазином и 1С. В этом случае новая категория добавляется, а старая категория не удаляется.

Хорошо было бы добавить в функционал модуля CommerceML выбор для пользователя, изменять главную категорию у товара на витрине при смене её в 1С или добавлять, как дочернюю.

Ну да, всего лишь нужно добавить опцию для выбора пользователя и условие для выше приведённого кода. Потому что может быть кому-то захочется сохранить консистентность структуры категорий в 1С и cs-cart

Чтобы при синхронизации товаров с 1С товары на сайте переносились в ту же категорию, что и в 1С, необходимо заменить всего одну строку
$product[‘main_category’] = (!empty($g_category_id)) ? $g_category_id : $category_id;
на
$product[‘main_category’] = $category_id;

Тогда кусок кода который я привёл выше будет выполняться в пустую и будут происходить бесполезные запросы в БД (причём там 3 запроса и они будут отрабатываться для каждого товара )

А у вас есть товары в двух категориях? В 1С нет возможности давать товару дополнительную категорию. Мы их добавляем на сайте.

Каждый товар? @Ya_annyshka

Нет не каждый, но есть товары, которые необходимо поместить в 2 категории. Причем, это выясняется на этапе описания. И не хочется, чтобы при загрузке из 1С удалялись эти доп категории для товаров.

1 лайк

Ручками проще. У нас например ежемесячно по 100 (около того) новых товаров добавляется в ассортимент, сначала импортом в спецкатегорию новых прступлений, а там уже, пройдясь по списку, ручками раскидать по категориям не такой и великий труд

1 лайк