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

Значение акции (скидки) в процентах %


 Поделиться

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

Хочу в акциях сделать значения в процентах.

 

Использовал:

 

 

но это не совсем то - суть в чем, я использую в товаре поля vendor_price и currency_id для удобного изменения цены по курсу. Скидка через данный модуль лишь помогает точно рассчитать скидочную цену и записывает ее значение. Т.е. при смене курса, значение скидочной цены не изменится + при импорте товаров аналогично, я могу залить только значение в гривне и конечно оно не будет меняется.

 

Вижу самое простое решение писать в поле Акция http://prntscr.com/ndovfk сказу значение уже в процентах и пересчитывать его при выводе примерно по такой формуле:

$special = (100 - $special) / 100 * $price;

Заменил в файле \catalog\model\catalog\product.php в public function getProduct($product_id)

'special' => $query->row['special'],

на

'special' => ($query->row['special'] ? (100-$query->row['special'])/100*$query->row['price'] : $query->row['special']),

Работает в: категории, поиске, брендах, товаре.

Не работает: в сортировке, фильтре, корзине, оформлении и везде в админке.

 

Вопрос в каких файлах еще заменить?

OCStore 2.3

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


нашел корзину и оформление \system\library\cart\cart.php в public function getProducts()

if ($product_special_query->num_rows) {
				$price = $product_special_query->row['price'];
				}

заменить на 

if ($product_special_query->num_rows) {
                    $price = (100 - $product_special_query->row['price'])/100*$product_query->row['price'];
				}

 

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


сортировка по цене \catalog\model\catalog\product.php 

elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			}

заменить на

elseif ($data['sort'] == 'p.price') {
				$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN (100-special)/100*price WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
			}

 

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


Вообще не понимаю в синтаксисе SQL, может кто то помочь с public function getProducts?

		$sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special";

Что здесь поменять по тому же принципу? Ловлю ошибку за ошибкой...

нужно, что то типа 

(100-special)/100*price

 

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


Не трогали бы вы это

Или купили бы уже готовый модуль

Акции и Скидки в процентах

 

ну.. и заодно подняли бы свой скил в sql

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

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

9 часов назад, chukcha сказал:

Не трогали бы вы это

Или купили бы уже готовый модуль

Акции и Скидки в процентах

 

ну.. и заодно подняли бы свой скил в sql

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

 

Задал вопросы по модулю автору, но не уверен, что он мне подойдет без допилов - немного другой принцип.

 

А у Вас хороших скил в sql? Не можете ответить, где подправить?

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


5 часов назад, chukcha сказал:

(100-price)/100*p.price

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

 

заменил еще в \admin\view\template\catalog\product_list.tpl

<td class="text-right"><?php if ($product['special']) { ?>
                    <span style="text-decoration: line-through;"><?php echo $product['price']; ?></span><br/>
                    <div class="text-danger"><?php echo $product['special']; ?></div>
                    <?php } else { ?>
                    <?php echo $product['price']; ?>
                    <?php } ?></td>

на

<td class="text-right"><?php if ($product['special']) { ?>
                    <span style="text-decoration: line-through;"><?php echo $product['price']; ?></span><br/>
                    <div class="text-danger"><?php echo (100-$product['special'])/100*$product['price']; ?></div>
                    <?php } else { ?>
                    <?php echo $product['price']; ?>
                    <?php } ?></td>

ну и все, везде работает

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


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

никто не в курсе как сделать такое же только со скидками(оптовыми ценами от кол-ва) поле discount ?

 

Заменил в файле \catalog\model\catalog\product.php

'price' => ($query->row['discount'] ? (100-$query->row['discount'])/100*$query->row['price'] : $query->row['price']),

 

Но чего то не срабатывает...

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


методом тыка в файле catalog\controller\product\product.php

изменил

foreach ($discounts as $discount) {
				$data['discounts'][] = array(
					'quantity' => $discount['quantity'],
					'price'    => $this->currency->format($this->tax->calculate((100-$discount['price'])/100*$data['price'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency'])
				);
			}

в товаре поменялось, но не работает в корзине...

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


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

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

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

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

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

Войти

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

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

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

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

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