Jump to content
Sign in to follow this  
v_grin

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

Recommended Posts

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

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

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

Share this post


Link to post
Share on other sites

Я делал подобное с помощью AJAX запроса.

Пример можно посмотреть тут.

Если такое решение подойдет скину код для примера.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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, но у меня на это не было времени.

Edited by afwollis
edit -> save

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

... значит ты действительно мало что видел !!!!!!!!
  • +1 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Добрый день.

А есть такое решение для версии Open cart 1.5.1?

Спасибо.

  • +1 1

Share this post


Link to post
Share on other sites

Присоединяюсь насчет 1.5.1.1

  • +1 1

Share this post


Link to post
Share on other sites

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

viewtopic.php?f=21&t=461

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

Share this post


Link to post
Share on other sites

Есть ли такое решение для opencart 1.5.1 ?

  • +1 1

Share this post


Link to post
Share on other sites

И мне нужна такая фича для 1.5.4.1

Кто поможет?

Готов заплатить если нужно.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.