camo-mania
Программные разработки для CMS Simpla, расширяющие и изменяющие стандартный функционал системы.

Каталог товаров

Каталог статей

Безпричинная пропажа свойств

На форуме можно найти множество сообщений про то, что в процессе работы CMS без видимых причин исчезают значения свойств у товаров.
В указанной теме описаны некоторые такие ситуации, и если их знать и про них помнить, то можно как-то избегать таких непрятностей.
Но бывают сообщения и о том, что в процессе работы CMS  пропадают свойства у товаров БЕЗ ВИДИМЫХ ПРИЧИН.
Оказалось, что это не выдумки неопытных админов, а такое действительно может происходить.
Пример 1.
1.1. Делаю импорт такого CSV-файла (предполагается, что перед импортом в базе указанных в файле товаров и категорий нет, то есть импорт запишет новые товары и категории):
Категория;Товар;Цена;Адрес;Видим;Рекомендуемый;Бренд;Вариант;Старая цена;Артикул;Склад;test_prop
kat1, kat2;prod1;0.00;p1;1;;;;;;;v1
kat2, kat1;prod2;0.00;p2;1;;;;;;;v2
1.2. Создадутся новые товары prod1, prod2, новые категории kat1, kat2 и  новое свойство test_prop.
1.3. если открыть в админке страницы новых товаров, то у них основной категорией являеся kat1.
А должны быть РАЗНЫЕ основные категории. Это происходит потому, что, импорт записывает в таблице s_products_categories в новых записях в поле position исключительно нули.
1.4. Имеем первую ошибку - импорт не учитывает порядок категорий, и записывает каждую категорию как основную (position=0).
1.5. Если товар пересохранить, то порядок зафиксируется правильный  (position приобретет корректные значения).
Ошибка досадная, но в большинстве случаев не сильно критичная. Но она порождает другую ошибку, весьма и весьма серьезную.
Пример 2.
2.1. Выполняем действие 1.1
2.2. Заметим что новые товары prod1, prod2 имееют свойство test_prop с разными значениями.
2.3. Откроем в админке страницу нового свойства test_prop. Можно видеть, что оно подключено к новым категориям kat1, kat2.
Отключим категорию kat2 от свойства, отменив у нее выделение, и сохраним изменения.
В результате новое свойство удалится  у всех новых товаров, что совершенно неправильно.
2.4 Получается пропажа свойств при простеньких безобидных действиях. Причина в функции function update_feature_categories($id, $categories) в запросе, который имет вид
$query = $this->db->placehold("DELETE o FROM __options o LEFT JOIN __products_categories pc ON pc.product_id=o.product_id WHERE o.feature_id=? AND pc.position=(SELECT MIN(pc2.position) FROM __products_categories pc2 WHERE pc.product_id=pc2.product_id) AND pc.category_id not in(?@)", $id, $categories);
В нем производится лишнее удаление по причине вышеописанной первой ошибки.
Запрос в таком виде появился в версии 2.3.7, ранее вместо него был другой запрос, который кажется, работал лучше.
Реальная типовая ситуация: админ импортом залил много товаров. Все прекрасно работает, админ радуется.
Через некоторое время он провел мелкое редактирование свойства, например, добавив к свойству новую категорию. И готово - массовая пропажа свойств произошла. Причем админ это обнаружит не сразу, а через некоторое время. Причем админу практически нереально обычными средствами обнаружить какую-то систему в пропавших свойствах, тем более определить причину.
Таким образом, выясняется, что жалобы на пропажу свойств - не капризы неумелых админов, а серьезная ошибка создателя CMS.


  • Отзывы (1)
  • Добавить отзыв

Отзывы:

Araik 01.08.2017

Есть решение?

© 2018 simpla-tuning.com