Опции. Связанные значения

Значения разных опций в товаре могут быть связаны. Например, у футболки 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 . "'");
                    }

usergio Copyright © 2025