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