Опции. Связанные значения
Значения разных опций в товаре могут быть связаны. Например, у футболки 46 размера, красного цвета связаны значения "красный" и "46".
У связанных значений одна цена и одно количество.
В OpenCart все опции независимы, это означает, что если не использовать сторонний плагин, то количество товаров увеличится в 2 раза: 5шт "красного" + 5шт. "46" итого 10 футболок. Кроме того, OpenCart позволит выбрать на сайте футболку 46 размера, белого цвета, которой нет в наличии.
В качестве стороннего плагина рекомендуется "Связанные опции"
Представление связанных опций в прайс листе.
Плагин понимает, что значения опций связаны, если они находятся в одной строке прайс листа и имеют общую колонку "Количество":
Если в настройках вкладки "Опции" прописать одну и ту же колонку 5, как количество опции "Цвет" и опции "Размер":
то плагин поймет, что эти опции связанные.
После обработки такого прайс листа модулем, в товаре mantis_1900245 появится 4 возможности выбора:
- цвет White - размер X
- цвет Orchid - размер L
- цвет Platinum - размер M
- цвет Platinum - размер XL
а плагин "Связанные опции" обеспечит невозможность выбора других сочетаний цвета и размера.
Проблемы с плагином "Связанные опции".
Плагин создает в базе данных собственную таблицу связанных опций, и по идее, должен выводить на сайт данные только из этой таблицы.
Но к сожалению, он также использует данные из штатной, опенкартовской таблицы опций:
которые часто противоречат данным из таблицы связанных опций.
Исправить ситуацию можно с помощью очистки опенкартовской таблицы опций инструментом:
после обновления товаров по прайс листу.
Или включить в файл admin/model/catalog/suppler.php программу автоматического удаление опций.
Для этого нужно перед строкой unset($rows1); вставить в это место:
следующий текст:
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "relatedoptions WHERE `product_id` = '" . $old_product_id . "'");
if (!empty($query->rows)) {
$this->db->query("DELETE FROM " . DB_PREFIX . "product_option_value WHERE product_id = '" . $old_product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_option WHERE product_id = '" . $old_product_id . "'");
}