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

Автоматичесий пересчет цены при выборе опции товара


v_grin

Recommended Posts

Господа, возникла следующая задача. Нужно автоматически пересчитывать цену товара на глазах у пользователя при выборе опции товара. К примеру, стандартный ипод стоит 1000 рублей, но когда выбираешь опцию (8gb + 500р.) нужно чтобы цена изменилась на глазах и стала 1500р. без перезагрузки страницы, т.е при помощи JavaScript.

Пример реализации можно посмотреть вот здесь http://www.rosdveri.ru/product/dver-mez ... l-avgusta/

Если кто уже реализовывал подобное или знает как можно реализовать - подскажите решение. Спасибо.

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


Я делал подобное с помощью AJAX запроса.Пример можно посмотреть тут.Если такое решение подойдет скину код для примера.

скинь , будет интересно посмотреть :(
Надіслати
Поділитися на інших сайтах


скинь , будет интересно посмотреть :(

TEMPLATE - product.tpl:

<script type="text/javascript"><!--  function recalculateprice(){    $.ajax({        type: 'post',        url: 'index.php?route=product/product/recalculateprice',        dataType: 'html',        data: $('#product :input'),        success: function (html) {            $('#price').html(html);        },        complete: function () {            params = {                'fontSize' : '14pt'            };            $('.price_int').css('font-size', '2em').animate(params, 'slow');            $('#price').css('padding-top', '23px').animate({'paddingTop' : '25px'}, 'slow');          }    });  }  recalculateprice();  //--></script>
для select'ов добавляем событие onchange="recalculateprice();"

CONTROLLER - product.php

    public function recalculateprice() {      if ($this->request->server['REQUEST_METHOD'] == 'POST') {			if (isset($this->request->post['option'])) {				$options = $this->request->post['option'];			} else {				$options = array();			}            if (isset($this->request->post['product_id'])) {              $product_id = $this->request->post['product_id'];            } else {              return;            }                  }      $this->load->model('catalog/product');      $product_query = $this->model_catalog_product->getProduct($product_id);      $option_price = 0;      foreach ($options as $product_option_value_id) {        $option_value_query = $this->db->query("SELECT pov.product_option_id, povd.name, pov.price, pov.quantity, pov.subtract, pov.prefix FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "product_option_value_description povd ON (pov.product_option_value_id = povd.product_option_value_id) WHERE pov.product_option_value_id = '" . (int)$product_option_value_id . "' AND pov.product_id = '" . (int)$product_id . "' AND povd.language_id = '" . (int)$this->language->getId() . "' ORDER BY pov.sort_order");        if ($option_value_query->num_rows) {          if ($option_value_query->row['prefix'] == '+') {              $option_price = $option_price + $option_value_query->row['price'];          } elseif ($option_value_query->row['prefix'] == '-') {              $option_price = $option_price - $option_value_query->row['price'];          }        }      }            $price = $this->currency->format($this->tax->calculate($product_query['price'] + $option_price, $product_query['tax_class_id'], $this->config->get('config_tax')));      //код для вывода результата, в виде таблицы для ценнника      $output = ....      ......      $this->response->setOutput($output, $this->config->get('config_compression'));    }
Естественно, я привел лишь основные куски кода, чтобы было понятно принцип.

Можно конечно было сделать изменение цены на стороне клиента, например, добавив атрибут price в тег <option> и выполнять расчет используя javascript, но у меня на это не было времени.

Змінено користувачем afwollis
edit -> save
Надіслати
Поділитися на інших сайтах


Круто. Спасибо, T-ray. Только, я так понимаю этими двумя кусками кода не ограничивается? Просто программер из меня совсем никакой, только сейчас начал потихоньку вникать в php и JavaScript. Поэтому, если будет не трудно опиши процесс подробнее. Если я вставлю эти два куска кода в файлы, что еще нужно будет сделать? Спасибо.P.S. Кстати прикольный у тебя магазин, в жизни бы не подумал, что на opencart можно реализовать подобное

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


P.S. Кстати прикольный у тебя магазин, в жизни бы не подумал, что на opencart можно реализовать подобное

... значит ты действительно мало что видел !!!!!!!!
  • +1 1
Надіслати
Поділитися на інших сайтах


Все таки возвращаясь к изначальной проблеме, господа программеры помогите решить задачу. Fix305, взываю к тебе о помощи ;) > Можно конечно было сделать изменение цены на стороне клиента, например, добавив атрибут price в тег и выполнять расчет используя javascript, но у меня на это не было времени.Вот это самый крутой вариант. Кто понимает о чем речь, скажите это слишком трудозатратно? Если да, то я отстану :) Либо как запущу магазин и пойму, что без этого пункта нельзя - закажу эту доработку за деньги. Но если не слишком трудозатратно, то надеюсь на бескорыстную помощь :) Спасибо!

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


Fix305, взываю к тебе о помощи ;)

Сейчас, к сожалению, нету времени - завтра с утра уезжаю на сборы (спортивные), как только чуточку там освоюсь (денек-2) займусь твоей просьбой, если ее, конечно, уже не решат =)
Надіслати
Поділитися на інших сайтах


Круто. Спасибо, T-ray. Только, я так понимаю этими двумя кусками кода не ограничивается? Просто программер из меня совсем никакой, только сейчас начал потихоньку вникать в php и JavaScript. Поэтому, если будет не трудно опиши процесс подробнее. Если я вставлю эти два куска кода в файлы, что еще нужно будет сделать? Спасибо.P.S. Кстати прикольный у тебя магазин, в жизни бы не подумал, что на opencart можно реализовать подобное

Я могу помочь вам бесплатно доделать вариант, пример кода которого я выкладывал выше.Напишите мне в ICQ, номер я вышлю в ЛС.Если будет время, то сделаю пересчет на клиенте для последней версии движка, но не обещаю. Это будет скорее всего в том случае, если кто-то из моих заказчиков оплатит такую доработку для своего магазина. Пока таких желающих нет. ;)
Надіслати
Поділитися на інших сайтах


Благодарю, T-ray за то что отозвался! Но все-таки самый оптимальный вариант - пересчет на стороне клиента. Если местный гуру OpenCart Fix305 не справится или у него не будет времени, то постучусь к тебе в асю. А вообще классно, когда есть такие люди на форуме, которые готовы помочь бескорыстно! ;) Спасибо Вам ребята!

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


Благодарю, T-ray за то что отозвался! Но все-таки самый оптимальный вариант - пересчет на стороне клиента. Если местный гуру OpenCart Fix305 не справится или у него не будет времени, то постучусь к тебе в асю. А вообще классно, когда есть такие люди на форуме, которые готовы помочь бескорыстно! :( Спасибо Вам ребята!

Боюсь полностью на стороне клиента не получиться без геморроя, т.к. надо ещё отформатировать цену.На клиенте выкусывать валюту и т.п. - я считаю бред. Валюта может быть и слева и справа, фактически это надо взять класс currency и написать его для клиента на javascript. Может кто-то подскажет другое решение?! Буду признателен. Сейчас у меня уже есть решение под 1.4.8b которое работает так:При изменении значения опции пересчитывается цена на клиенте, затем запрос к серверу чтобы отформатировать значение цены.
Надіслати
Поділитися на інших сайтах


  • 1 year later...

Вот мое решение в отдельной теме, может кого-то устроит:

viewtopic.php?f=21&t=461

пост не существует, может у кого сохранилось решение под 1.4.х

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


  • 2 months later...
  • 1 year later...
  • 1 month later...
  • 1 year later...

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

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

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

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

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

Вхід

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

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

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

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

Important Information

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