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

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


Recommended Posts

Здравствуйте!

Хочу сделать так, чтобы скидка на товар проставлялась в %, а не стандартно жетской привязкой к сумме. Схема такая: Если сумма скидки > 1, то считаем эту сумму как новую цену товара, если сумма скидки < 1 (например 0.30), то достаем price (цену) товара и умножаем её на special (сумма в акции). Получается примерно так: Товар стоит 1000 рублей. Указываем сумму в акции товара 300 и товар становится акционным со стоимостью товара 300 рублей. А если мы указываем сумму в акции товара 0.30, то 1000 умножается на 0.30 и выходит товар теперь стоит 700 рублей (отняли 30%).

 

Пишу значит условие в product.php : 

if ((float)$product_info['special'] < 1) {
	$data['special'] = $this->model_catalog_product->getProduct($this->request->get['product_id'])['price'] * $this->model_catalog_product->getProduct($this->request->get['product_id'])['special'];
}

Условие работает, в карте товара отображается нужная стоимость, но при покупке товара наша сумма в процентах не учитывается, а в корзину добавляется 0 стоимость товара (мы ведь в акции 0.30 указали).

Почему так происходит? 

 

P.S. С разработкой столкнулся впервые.

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


1. грубейшая ошибка

 

Если вам это это надо то так не делают

 

if ((float)$product_info['special'] < 1) {
    $data['special'] = $this->model_catalog_product->getProduct($this->request->get['product_id'])['price'] * $this->model_catalog_product->getProduct($this->request->get['product_id'])['special'];
}

 

 

 вот  так

if ((float)$product_info['special'] < 1) {
    $data['special'] = $product_info['price']  - $product_info['price'] * (float)$product_info['special']
}

 

но это все просто..

 

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

 

или будет в корзину что-то класть

то вы узнаете что это используется во многих моделях.

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

1. грубейшая ошибка

 

Если вам это это надо то так не делают

 

 вот  так

if ((float)$product_info['special'] < 1) {

    $data['special'] = $product_info['price']  - $product_info['price'] * (float)$product_info['special']

}

 

но это все просто..

 

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

 

или будет в корзину что-то класть

то вы узнаете что это используется во многих моделях.

К сожалению не работает, все так же, сумма товара в корзине = 0.

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


Купите ...

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

 

Интересно что переменная отрабатывает нормально в tpl, но в cart.php передается другое значение...

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


но в cart.php

 

Именно об этом я и сказал

 

или будет в корзину что-то класть

то вы узнаете что это используется во многих моделях.

 

Т.е. смотрите cart/add

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

А мне нужно 

Скидки нужно делать либо акциями либо объемными скидками(стандартный функционал), либо модулями "учитывать в итоге". Но кто ж вас заставит не изобретать свой велосипед. Вперед )

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

Есть пример для акций в процентах для oc1.5

 

Вот кусок vqmod:

  <file name="admin/controller/catalog/product.php">
    <operation>                           
      <search position="replace"><![CDATA[$special = $product_special['price'];]]></search>
      <add><![CDATA[$special = '-' . (float)$product_special['price'] . '%';]]></add>
    </operation>  
  </file>  
  
  <file name="system/library/cart.php">
    <operation>                           
      <search position="replace"><![CDATA[$price = $product_special_query->row['price'];]]></search>
      <add><![CDATA[$price *= 1.0 - $product_special_query->row['price'] / 100.0;]]></add>
    </operation>     
  </file>
  

  <file name="catalog/model/catalog/product.php">
    <operation>                           
      <search position="replace"><![CDATA[$query->row['special']]]></search>
      <add><![CDATA[((float)$query->row['special'] ? $query->row['price'] * (1.0 - (float)$query->row['special']/100.0) : 0)]]></add>
    </operation>  
  </file>  

Для OC2 можно переделать по аналогии.

Сейчас пока нет времени привести готовый кусок под скидки OC2.

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

Вы заранее обрекли на акции в процентах

 

а теперь попробуйте отсортировать... по цене.с акциями.

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

Вы заранее обрекли на акции в процентах

 

а теперь попробуйте отсортировать... по цене.с акциями.

С сортировкой вопрос тоже элементарно решается.

Это не входит в вопрос данной темы.

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

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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

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

Important Information

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