Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


shurik
 Share

Recommended Posts

Кто-нибудь знает, как сгделать ик, чтобы усиновленная на товар скидка отражалась еещё и на этоне опции? 

Link to comment
Share on other sites


  • 3 weeks later...

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

Link to comment
Share on other sites


  • 1 month later...

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

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

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

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

0,2 - 100

0,5 - 300

0,75 - 600

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

Link to comment
Share on other sites


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

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

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

Link to comment
Share on other sites


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

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

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

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

Link to comment
Share on other sites


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

Link to comment
Share on other sites


  • 1 month later...

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

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

 

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

Вот пример:

Имею товар. базовая стоимость (для простоты) 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 февраля инцы с бубном продолжаются?

 

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

 

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

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

Спасипотому что!

Link to comment
Share on other sites


  • 1 month later...

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

 

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

 

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

Link to comment
Share on other sites


  • 8 months later...
  • 7 months later...

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

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

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

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

Link to comment
Share on other sites


  • 1 month later...

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

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

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

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

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

Link to comment
Share on other sites


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

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

Link to comment
Share on other sites

  • 3 weeks later...

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

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

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

Link to comment
Share on other sites


Добрый гдень!

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

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

С уважением,

Игорь

Link to comment
Share on other sites

  • 1 month later...

В контроллере 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
);
 
Как-то ик, по крайней мере у меня рилииет
Link to comment
Share on other sites


  • 6 months later...

 

В контроллере 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
);
 
Как-то ик, по крайней мере у меня рилииет

 

 

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

Link to comment
Share on other sites


  • 8 months later...

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

 

 

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']

);

}

}

 
Это не решение, а всего лишь пример, подходит для всех версий с некоторыми допилами под собственные нужды, лично у меня на всех версиях при рилите ручками все рилииет, бездумно копировать код смысла нет, просто пролиийте его поймите ход мысли.
Edited by user13
Link to comment
Share on other sites


  • 4 weeks later...

 

В контроллере 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.

спасипотому что

Link to comment
Share on other sites

  • 3 years later...
  • 4 months later...
В 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

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

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.