Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено?..] Акции в процентах


Recommended Posts

Если массово, то https://opencartforum.com/files/file/1841-

Надіслати
Поділитися на інших сайтах

Если массово, то https://opencartforum.com/files/file/1841-

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

Надіслати
Поділитися на інших сайтах


Как в админке добавлять акции впроцентах?

 

Смысл вопроса в том чтобы значение акции сохранялось не как абсолютная величина а в процентах.

Я думаю это многим было бы полезно.

Надіслати
Поділитися на інших сайтах


ничего подобного

Не надо пилить

 

Т.е. ввод в %, а мод пересчитывает

 

Да работает , считает правильно, но значение сохраняется не в процентах.

Надіслати
Поділитися на інших сайтах


Вы скажите, что вам надо?

 

Выводить скидку в %

 

Ну так это тоже не сложно...

 

Или указывать

100

80 - скидка 20%

ps хотя это не совсем так, но не суть

Надіслати
Поділитися на інших сайтах

Вы скажите, что вам надо?

 

Выводить скидку в %

 

Ну так это тоже не сложно...

 

Или указывать

100

80 - скидка 20%

ps хотя это не совсем так, но не суть

Мне нужно чтобы тот процент который я поставил не изменялся от основной цены, что бы был фиксированный.

То есть - если цена 200 а процент 20 то при изменении цены 200 на 190 процент оставался 20

Надіслати
Поділитися на інших сайтах


awfollis же написал сразу - дох.. очень много придется переделывать - все места, где используется цена.

а в магазине она повсюду.

Надіслати
Поділитися на інших сайтах

а что мешает переделать в одном месте, модели product.php ?

 

OC Team Подскажите пожалуйста подробней что и как переделать?

Я так понимаю где то в этих строках?

if (isset($data['product_discount'])) {
			foreach ($data['product_discount'] as $product_discount) {
				$this->db->query("INSERT INTO " . DB_PREFIX . "product_discount SET product_id = '" . (int)$product_id . "', customer_group_id = '" . (int)$product_discount['customer_group_id'] . "', quantity = '" . (int)$product_discount['quantity'] . "', priority = '" . (int)$product_discount['priority'] . "', price = '" . (float)$product_discount['price'] . "', date_start = '" . $this->db->escape($product_discount['date_start']) . "', date_end = '" . $this->db->escape($product_discount['date_end']) . "'");
			}
		}

		if (isset($data['product_special'])) {
			foreach ($data['product_special'] as $product_special) {
				$this->db->query("INSERT INTO " . DB_PREFIX . "product_special SET product_id = '" . (int)$product_id . "', customer_group_id = '" . (int)$product_special['customer_group_id'] . "', priority = '" . (int)$product_special['priority'] . "', price = '" . (float)$product_special['price'] . "', date_start = '" . $this->db->escape($product_special['date_start']) . "', date_end = '" . $this->db->escape($product_special['date_end']) . "'");
			}
		}

Мои рассуждения:

Вотс скрипт который пересчитывает процент

<script type="text/javascript"><!--
            
            function calcPrice(name, row) {
            
                var perc = $('input[name=\'product_' + name + '[' + row + '][percentage]\']').val();
                var price = $('input[name=\'price\']').val();
                var discounted_price = price * (1-(perc/100));
                var calculated_percentage = discounted_price * (1-(price/100));
                
                $('input[name=\'product_' + name + '[' + row + '][price]\']').val(discounted_price);
                
            }
            //--></script>

Он привязан к цене

А что если он просто будет брать цену и считать процент от нее.

То есть он и сейчас считает, но  при изменении цены изменяется и процент. Можно ли его зафиксировать?

Просто я в скриптах не шарю.

Надіслати
Поділитися на інших сайтах


а точно ли только в одном месте? ;)

 

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

не считая, что какие-то сторонние модули могут не к функции лезть, а своими запросами формировать

Надіслати
Поділитися на інших сайтах

AlexDW, от сторонних запросов никто не застрахован ) но часто даже сторонние используют getProduct() из модели
qqq64, я код вам не буду писать. идея следующая: в модели product.php перед return добавить условие, если задана акция у товара, то акцию установить = цена * {процент скидки}/100

Надіслати
Поділитися на інших сайтах

Но тогда все акции нужно вводить в процентах

 

перед return добавить условие

 

 

Можно и в самом массиве, который возвращается.

 

Но тогда может сломаться сортировка по цене.

Надіслати
Поділитися на інших сайтах

Если ВСЕ акции указывать в процентах и только в %, то

(SELECT (p.price * ps.price / 100) FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id .....

пробуйте

 

Во всех местах, где есть  product_special

Надіслати
Поділитися на інших сайтах

Если ВСЕ акции указывать в процентах и только в %, то

(SELECT (p.price * ps.price / 100) FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id .....

пробуйте

 

Во всех местах, где есть  product_special

Попробовал вылезла ошибка    Notice: Error: Unknown column 'p.price' in 'field list'      Error No: 1054

 

Может я не туда вставил?

public function getProductSpecials($product_id) {
		$query = $this->db->query("SELECT (p.price * ps.price / 100) FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "' ORDER BY priority, price");

		return $query->rows;
	}

Или еще где то? с селектом другого не нашел. А product_special  много??? куда именно подскажите плизззз.

Надіслати
Поділитися на інших сайтах


пилить сохранение/редактирование и весь остальной код, отображающий/использующий акции - ДО.ФИ.ГА.

 

+++++++

Надіслати
Поділитися на інших сайтах

Если ВСЕ акции указывать в процентах и только в %, то

(SELECT (p.price * ps.price / 100) FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id .....

пробуйте

 

Во всех местах, где есть  product_special

 

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

 

то, как вы описали поломает кучу кода по движку, потому как ВЕЗДЕ придется переписывать акция-процент

Надіслати
Поділитися на інших сайтах

Как раз то что я описал - это ВСЕГДА УКАЗЫВАТЬ акцию в процентах

И она пересчитается уже в запросах

 

Тогда будет возможность и сортировать по цене

И нигде больше в кодах нетрогать

 

Только модель!!!

 

 

Попробовал вылезла ошибка    Notice: Error: Unknown column 'p.price' in 'field list'      Error No: 1054

 

Может я не туда вставил?

ДА, не туда

нужно вставлять в getProducts. getProduct

 

Для getProductSpecials нужен другой запрос...

Надіслати
Поділитися на інших сайтах

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

 

 

В каком месте?

 вот мод который я показал  - добавляет js поле и пересчитывает

Но, нигде сам процент не участвует, при этом цена на акции остается фиксированной

 

В любом случае для расчета цены скидки нужна цена товара.

Надіслати
Поділитися на інших сайтах

  • 5 months later...

Все намного проще!!!

Если у Вас цена более 1 рубля/доллара/евро и т.п., то делаете следующее:

1. В файле catalog/model/catalog/product.php

меняете строчку:

 

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

 

на

 

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

 

2. Теперь, добавляя акцию, ставите в поле цены значение 0.1 (т.е. 10%), 0.2 (20%) и т.д.

 

Всем удачи!

Змінено користувачем artblmon
Надіслати
Поділитися на інших сайтах


Увы и ах..

Вы пробовали в таком случае сортировать по цене?

 

Кроме того, список товаров присутсвует не только в catalog, но и  в поиске, производителях, модулях

Надіслати
Поділитися на інших сайтах

В производителях, поиске работает.

Согласен - сортировка не работает, т.к. сортируется на уровне SQL-запроса.

Модули тоже не работают.

Буду делать только под себя и править некоторые модули...

 

З.Ы. в предыдущем посте вместо

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

надо

'special'          => (($query->row['special'] > 0) && ($query->row['special'] < 1)   ? $query->row['price']*(1-$query->row['special']) : $query->row['special']),

может все-таки кому пригодится

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.