Jump to content

Recommended Posts

На форуме можно найти множество сообщений про то, что в процессе работы CMS без видимых причин пропадают свойства у товаров, например
http://forum.simplacms.ru/topic/2916-%D0%B8%D1%81%D1%87%D0%B5%D0%B7%D0%B0%D1%8E%D1%82-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F-%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2/
В этой теме описаны некоторые такие ситуации, и если их знать и по них помнить, то можно контролировать ситуацию.

Но бывают сообщения и о том, что в процессе работы 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.
Пожелаем ему исправлять ошибки оперативно...

Link to post
Share on other sites

 

Есть решение этой ошибки?

Посмотрел вышеописанный метод, в голову пришла одна идея, но надо тестить, если есть у кого желание попробовать посмотреть в сторону update, а не delete - insert.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...