BUG ? Дублирует значение нового поля в cscart_products для всех продавцов

Магазин: Multi-Vendor последняя версия

  1. В таблице cscart_products создаем, к примеру, новое поле: ‘delivery_time’

  2. Выводим это ‘delivery_time’ поле после существующего ‘Максимальное число вариантов в списке выбора количества’ что в секции ‘Ценообразование / Склад’ на странице ‘Редактирование товара’ во вкладке ‘Общее’:
    design/backend/templates/addons/НАЗВАНИЕ_МОДУЛЯ/hooks/products/update_product_list_qty_count.post.tpl

< d i v class=“control-group”>
< l a b e l class=“control-label” for=“product_delivery_time”>{__(“list_delivery_time”)}:< / l a b e l>
< d i v class=“controls”>
< i n p u t type=“text” name=“product_data[delivery_time]” id=“product_delivery_time” size=“10” value="{$product_data.delivery_time}" class=“input-long” />
< / d i v >
< / d i v >
(вставил пробелы в тэги чтобы код сохранился в этой форме)

Регистрируем в init.php хук: update_product_post

app/addons/НАЗВАНИЕ_МОДУЛЯ/func.php

function fn_НАЗВАНИЕ_МОДУЛЯ_update_product_post($product_data, $product_id, $lang_code, $create){
$_data = array();
$_data[“delivery_time”] = $product_data[“delivery_time”];
db_query(“UPDATE ?:products SET ?u WHERE product_id = ?i”, $_data, $product_id);
}

В АДМИНКЕ открываем товар со статусом: Продавец ‘Все продавцы (общий товар)’
В новое поле вставляем любое значение и сохраняем продукт.

Этот товар продают еще несколько продавцов.
Открываем теперь VENDOR-овскую админку и находим этот же продукт.
Видим что значение нового поля стало таким же как и у ‘основного’ продукта в АДМИНКЕ.

PS:
Для примера можно вставить что нибудь в поле ‘Максимальное число вариантов в списке выбора количества’ и после сохранения это поле НЕ обновляется для продукта в VENDOR-овской админке (как и должно) , а вот новое поле обновляет значения в VENDOR-овской админке (как не должно)

1 лайк

Здравствуйте. Мы перенесли данную тему в другой раздел форума, т.к она относится к сторонней разработке. Спасибо за понимание.

2 сообщения перенесены в новую тему: Например, external_id при включении в продажу копируется от головного товара на товар продавца

@cartdevelopment, пожалуйста, напишите нам в HelpDesk для более подробного изучения проблемы в вашей установке.

Спасибо.

Вот ваша же подробная статья:
https://www.cs-cart.ru/docs/4.1.x/developer/howto/addon/product_field_4.html
Сделайте все тоже самое на последней версии для мульти вендора и баг воспроизведется

Тоже самое происходит и с таблицей cscart_product_descriptions. Добавляешь новое поле по аналогии и туда записываются данные из головного продукта.
Часть полей пересохраняются для дочерних продуктов в cscart_products это да.
(Пару клиентов отговорил выбирать эту смс-ку. Хотя и у других полно багов)

Данное поведение не является багом.

  1. Зачем использовать fn_НАЗВАНИЕ_МОДУЛЯ_update_product_post и дополнительно вносить изменения в таблицу ?:products? Если название поля в шаблоне идентично имени столбца в таблице ?:products, то его значение у товара и так обновится в fn_update_product.
  2. Для того, чтобы значение поля от родительского товара не распространялось на значение поля дочерних товаров, его нужно включить в список полей, которые будут исключены при обновлении дочерних товаров. Это можно сделать в post схеме app/addons/[YOUR_ADDON]/schemas/product_variations/product_types.post.php, например следующим образом:

<?php

defined(‘BOOTSTRAP’) or die(‘Access denied’);

$schema[PRODUCT_TYPE_VENDOR_PRODUCT_OFFER][‘fields’][]= ‘delivery_time’;

return $schema;


Пример и предустановленные исключённые поля можно посмотреть в стандартной схеме app/addons/master_products/schemas/product_variations/product_types.post.php

А как об этом должен узнать новый разработчик модуля? Куда смотреть разработчику php не работавшему ранее с CS-Cart или с конкретным набором функций, чтобы быстро понять как надо делать то или иное правильно?

1 лайк