Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

[Решено?..] Установка скидки на товар с опцией


shurik
 Поделиться

Рекомендованные сообщения

  • 3 недели спустя...

Честно говоря, прочитал пост и не понял, что должно происходить, ведь в опциях настраивается сколько добавить или убавить от цены основной при выборе, а что надо если не это ?

Ссылка на комментарий
Поделиться на других сайтах


  • 1 месяц спустя...

Честно говоря, прочитал пост и не понял, что должно происходить, ведь в опциях настраивается сколько добавить или убавить от цены основной при выборе, а что надо если не это ?

Вопрос такой же. Не знаю, что имел в виду автор темы, ситуация в моем случае: есть товар, у него есть опции (разный объем), соответственно у разных опций разная цена (поставил дополнение, которое дает устанавливать к опциям не только +/-, но и точные значения). Все работает, цену на сайте меняет в зависимости от выбора опции. Далее ввел дополнительную группу пользователей (по ней предусмотрена закупочная цена, не процент какой либо скидки, а фиксированная для каждого товара/опции) в карточке товара в разделе скидки я могу проставить цену для данной группы пользователей, НО!!!! я могу изменить только базовую цену, а цену опций нет, как бы этот момент реализовать?

Ситуация сейчас базовая цена я выставляю наименьшую из опций,

получаю: объем/цена

0,2 - 100

0,5 - 300

0,75 - 600

а скидку могу проставить только к первому объему

Ссылка на комментарий
Поделиться на других сайтах


...как бы этот момент реализовать?

добавив новые столбцы в таблицы опций и протянув их сквозь админку и каталог.

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

добавив новые столбцы в таблицы опций и протянув их сквозь админку и каталог.

да, в этом направлении я уже начал думать, только чуть быстрее будет добавки сделать в таблицы скидок .....

написал сюда, в надежде, что может кто-то уже сталкивался со схожим вопросом, и может даже есть готовый модуль, просто уровень программирования у меня очень начальный, на листочке написал что и где нужно сделать, но думаю, что очень долго буду реализовывать

Ссылка на комментарий
Поделиться на других сайтах


добавив новые столбцы в таблицы опций и протянув их сквозь админку и каталог.

добавил столбцы в таблицы опций (точнее заменил столбик вес, он мне не нужен), а дальше застрял, подскажите если не сложно -

получается есть две группы, 3 опции, т.е. на странице опций проставлены 6 вариантов цен, как тут составить условие вывода цены?

а еще есть товары, у которых опций нет, т.е. есть только базовая цена, по которой тоже возможны варианты в зависимости от группы (в разделе скидка)

Ссылка на комментарий
Поделиться на других сайтах


Вот тоже сейчас ломаю голову как реализовать систему скидок для опций, у меня у товара цена равна 0 а все цены хранятся в опциях (+200 р. +400 р. и т.д.) то-есть я могу управлять только одной ценой, как сделать скидку, и как сделать например если я хочу поднять все цены на 20%, может есть какое-то решение?

Ссылка на комментарий
Поделиться на других сайтах


  • 1 месяц спустя...

Проблема актуальна!

Посоветуйте решение. Иначе при каталоге даже всего в несколько десятков товаров, что-то делать с опциями для дополнительных групп, просто не представляется возможным - очень большой объем работы. я не говорю о сотнях товаров.

 

У меня ситуация схожая с ранее озвучеными.

Вот пример:

Имею товар. базовая стоимость (для простоты) 1000 руб.

и имеет 3 опции:

1 опция + 500р. = 1500р.

2 опция + 1000р. = 2000р.

3 опция + 1500р. = 2500р.

 

Мне надо сделать скидку в 20% на этот товар для конкретной группы. Путем манипуляций на калькуляторе получаем то что дожно быть в магазине в идеале:

 

Базовая стоимость - 20% = 800р.

1 опция + 500р. - 20% = 1200р.

2 опция + 1000р. = 1600р.

3 опция + 1500р. = 2000р.

 

Соответстченно в этом случае система должна брать базовую стоимость без скидки, прибавлять к ней стоимость опции и делать скидку.

 

На деле имеем:

 

Базовая стоимость - 20% = 800р. (поставлена вручную)

1 опция + 500р. = 1300р.

2 опция + 1000р. = 1800р.

3 опция + 1500р. = 2300р.

 

Хорошо. я смогу в ручном режиме изменить цены для данной группы в рамках этой предновогодней акции. но потом мне надо вернуть цены обратно, а к 23 февраля танцы с бубном продолжаются?

 

Может быть я чего-то недопонимаю в логике данного движка магазина.

 

А может быть плохо изучал форум.

Подскажите решение или модель волшебный.

Спасибо!

Ссылка на комментарий
Поделиться на других сайтах


  • 1 месяц спустя...

Актуально, думал "волшебный модуль" уже существует.

 

Вот у меня значение цен по опциям может отличатся в 10 раз. Например, я установил скидку для опции стоимостью 10 р,  5 р. То есть -50%. На странице появилась заманчивая надпись "-50%".  При этом цена опции за 100 р. стала 95 р. (-5%). Не логично, как то.

 

Было бы неплохо если бы  скидки для опций пересчитывались в процентном соотношении. То есть, в этом случае, -50% для каждой опции. 

Ссылка на комментарий
Поделиться на других сайтах


  • 8 месяцев спустя...
  • 7 месяцев спустя...

Если не решили проблему то вот:

У меня не плюсуется, а сразу выводится цена опции

В контроллере указать цена опции -( (цена опции/100 )*процент от товара)

Ну и на опцию поставить событие onchange

Ссылка на комментарий
Поделиться на других сайтах


  • 1 месяц спустя...

Если не решили проблему то вот:

У меня не плюсуется, а сразу выводится цена опции

В контроллере указать цена опции -( (цена опции/100 )*процент от товара)

Ну и на опцию поставить событие onchange

Простите, а можно поподробнее, в каком контроллере и где указывать, и на какую опцию нужно ставить событие onchange? Заранее спасибо.

Ссылка на комментарий
Поделиться на других сайтах


у меня есть модуль "Скидка в процентах", который действует как на основную цену, так и на опции.

до тиражного состояния еще не довел, так что для желающих делаю ручную установку.

Ссылка на комментарий
Поделиться на других сайтах

  • 3 недели спустя...

у меня есть модуль "Скидка в процентах", который действует как на основную цену, так и на опции.

до тиражного состояния еще не довел, так что для желающих делаю ручную установку.

Если можно, то нужен этот модуль.

Ссылка на комментарий
Поделиться на других сайтах


Добрый день!

Свяжитесь со мной в понедельник после 16-00.

Сейчас уезжаю на выходные.

С уважением,

Игорь

Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

В контроллере products.php 

$dependent_option_value_data = $this->model_catalog_product->getDependentOptionValues($this->request->get['product_id'], $option_value['product_option_value_id']);

 

после

$sp = round(100-($product_info['special']*100/$product_info['price'])); // считаем проценты

$sp2 = round((int)$option_value['price']/100)*$sp;
$sp3 = round((int)$option_value['price']-$sp2);
$option_value_data[] = array(
'price2'   =>  (float)$sp3 ? (float)$sp3 : 0
);
 
Как-то так, по крайней мере у меня работает
Ссылка на комментарий
Поделиться на других сайтах


  • 6 месяцев спустя...

 

В контроллере products.php 

$dependent_option_value_data = $this->model_catalog_product->getDependentOptionValues($this->request->get['product_id'], $option_value['product_option_value_id']);

 

после

$sp = round(100-($product_info['special']*100/$product_info['price'])); // считаем проценты

$sp2 = round((int)$option_value['price']/100)*$sp;
$sp3 = round((int)$option_value['price']-$sp2);
$option_value_data[] = array(
'price2'   =>  (float)$sp3 ? (float)$sp3 : 0
);
 
Как-то так, по крайней мере у меня работает

 

 

А для второй версии как это реализовать, не подскажите?

Ссылка на комментарий
Поделиться на других сайтах


  • 8 месяцев спустя...

А для второй версии как это реализовать, не подскажите?

 

 

catalog/model/catalog/product.php

перед public function getProductDiscounts($product_id) 

 

public function getDependentOptions($product_id) {

$this->checkDependentOptionDb();

$query = $this->db->query("SELECT parent_product_option_id AS parent, child_product_option_id AS child FROM `" . DB_PREFIX . "dependent_option` WHERE product_id = '" . (int)$product_id . "'");

return $query->rows;

}

public function getDependentOptionValues($product_id, $product_option_value_id) {

$this->checkDependentOptionValueDb();

$parent = array();

$query = $this->db->query("SELECT parent_product_option_value_id FROM `" . DB_PREFIX . "dependent_option_value` WHERE product_id = '" . (int)$product_id . "' AND child_product_option_value_id = '" . (int)$product_option_value_id . "'");

foreach ($query->rows as $value) {

$parent[] = $value['parent_product_option_value_id'];

}

$parent = implode(' ', $parent);

return $parent;

}

private function checkDependentOptionDb() {

$query = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "dependent_option'");

if (!$query->rows) {

$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "dependent_option` (

`product_id` int(11) NOT NULL,

`parent_option_id` int(11) NOT NULL,

`child_option_id` int(11) NOT NULL,

`parent_product_option_id` int(11) NOT NULL,

`child_product_option_id` int(11) NOT NULL,

KEY `product_id` (`product_id`),

KEY `child_product_option_id` (`child_product_option_id`))

ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;");

}

}

private function checkDependentOptionValueDb() {

$query = $this->db->query("SHOW TABLES LIKE '" . DB_PREFIX . "dependent_option_value'");

if (!$query->rows) {

$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "dependent_option_value` (

`product_id` int(11) NOT NULL,

`parent_option_id` int(11) NOT NULL,

`child_option_id` int(11) NOT NULL,

`parent_option_value_id` int(11) NOT NULL,

`child_option_value_id` int(11) NOT NULL,

`parent_product_option_value_id` int(11) NOT NULL,

`child_product_option_value_id` int(11) NOT NULL,

KEY `product_id` (`product_id`),

KEY `parent_option_id` (`parent_option_id`))

ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;");

}

}

 
 
 
в контроллере-после $data['options'] = array(); пишем что-то на подобии этого

foreach ($this->model_catalog_product->getProductOptions($product_id) as $option) {

if ($option['type'] == 'select' || $option['type'] == 'radio' || $option['type'] == 'checkbox' || $option['type'] == 'image') {

$option_value_data = array();

foreach ($option['option_value'] as $option_value) {

if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {

$dependent_option_value_data = $this->model_catalog_product->getDependentOptionValues($product_id, $option_value['product_option_value_id']);

$option_value_data[] = array(

'product_option_value_id' => $option_value['product_option_value_id'],

'option_value_id' => $option_value['option_value_id'],

'parent' => $dependent_option_value_data,

'name' => $option_value['name'],

'image' => $this->model_tool_image->resize($option_value['image'], 120, 120),

'price' => (float)$option_value['price'] ? $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))) : false,

'price2' => (float)$option_value['price'] ? (int)$option_value['price'] : false,

'coeff' => (float)$option_value['price'] ? (float)$option_value['price'] : 0,

'price_prefix' => $option_value['price_prefix']

);

}

}

$this->data['options'][] = array(

'product_option_id' => $option['product_option_id'],

'option_id' => $option['option_id'],

'name' => $option['name'],

'type' => $option['type'],

'option_value' => $option_value_data,

'required' => $option['required']

);

} elseif ($option['type'] == 'text' || $option['type'] == 'textarea' || $option['type'] == 'file' || $option['type'] == 'date' || $option['type'] == 'datetime' || $option['type'] == 'time') {

$this->data['options'][] = array(

'product_option_id' => $option['product_option_id'],

'option_id' => $option['option_id'],

'name' => $option['name'],

'type' => $option['type'],

'option_value' => $option['option_value'],

'required' => $option['required']

);

}

}

 
Это не решение, а всего лишь пример, подходит для всех версий с некоторыми допилами под собственные нужды, лично у меня на всех версиях при работе ручками все работает, бездумно копировать код смысла нет, просто прочитайте его поймите ход мысли.
Изменено пользователем user13
Ссылка на комментарий
Поделиться на других сайтах


  • 4 недели спустя...

 

В контроллере products.php 

$dependent_option_value_data = $this->model_catalog_product->getDependentOptionValues($this->request->get['product_id'], $option_value['product_option_value_id']);

 

после

$sp = round(100-($product_info['special']*100/$product_info['price'])); // считаем проценты

$sp2 = round((int)$option_value['price']/100)*$sp;
$sp3 = round((int)$option_value['price']-$sp2);
$option_value_data[] = array(
'price2'   =>  (float)$sp3 ? (float)$sp3 : 0
);
 
Как-то так, по крайней мере у меня работает

 

а можно подробней? в каком контроллере, куда вставлять? не нашел даже файла такого. версия 1.5.5.1.2.

спасибо

Ссылка на комментарий
Поделиться на других сайтах

  • 3 года спустя...

Потратил 2 дня, зато все работает

изменения нужны в catalog/model/catalog/product.php и system/library/cart/cart.php

Вот мод для 2.3.0.2 discount_option_auto.ocmod.xml

Ссылка на комментарий
Поделиться на других сайтах


  • 4 месяца спустя...
В 18.06.2020 в 22:54, lapami5452 сказал:

Потратил 2 дня, зато все работает

изменения нужны в catalog/model/catalog/product.php и system/library/cart/cart.php

Вот мод для 2.3.0.2  discount_option_auto.ocmod.xml 5 \u043a\u0411 · 15 downloads

это он добавить скидку для опции ? 

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.