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

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