Ürünün fiyatını 0 olarak giriyorum. Parçalara fiyat ekleyip tüm parçaların fiyatlarını toplamasını istiyorum.
Yani bu durumda olması gereken: eklenen parça fiyatlarını toplayıp fiyat olarak göstermek ama parça fiyatı yoksa fiyata yazılanı göstermek.
Olması gereken ürün sayfası açılınca işaretli parçaların toplamını fiyata yazması.
Şuradan bakabilirsiniz: ÜRÜNE GİT
Modülün kaynak kodları (free modüldür)
Alıntı
<modification>
<id>product - options live update</id>
<version>1.0</version>
<vqmver>2.3.0</vqmver>
<author>vlcekmi3</author>
<!-- CONTROLLER -->
<file name="catalog/controller/product/product.php">
<operation>
<search position="before"><![CDATA[public function index() {]]></search>
<add><![CDATA[
private function getOptionPrice($product_id = 0, $options = array()) {
$option_price = 0;
$product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1'");
if ($product_query->num_rows) {
foreach ($options as $product_option_id => $option_value) {
$option_query = $this->db->query("SELECT po.product_option_id, po.option_id, od.name, o.type FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_option_id = '" . (int)$product_option_id . "' AND po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "'");
if ($option_query->num_rows) {
if ($option_query->row['type'] == 'select' || $option_query->row['type'] == 'radio' || $option_query->row['type'] == 'image') {
$option_value_query = $this->db->query("SELECT pov.option_value_id, ovd.name, pov.quantity, pov.subtract, pov.price, pov.price_prefix, pov.points, pov.points_prefix, pov.weight, pov.weight_prefix FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_option_value_id = '" . (int)$option_value . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
if ($option_value_query->num_rows) {
if ($option_value_query->row['price_prefix'] == '+') {
$option_price += $option_value_query->row['price'];
} elseif ($option_value_query->row['price_prefix'] == '-') {
$option_price -= $option_value_query->row['price'];
}
}
} elseif ($option_query->row['type'] == 'checkbox' && is_array($option_value)) {
foreach ($option_value as $product_option_value_id) {
$option_value_query = $this->db->query("SELECT pov.option_value_id, ovd.name, pov.quantity, pov.subtract, pov.price, pov.price_prefix, pov.points, pov.points_prefix, pov.weight, pov.weight_prefix FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_option_value_id = '" . (int)$product_option_value_id . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
if ($option_value_query->num_rows) {
if ($option_value_query->row['price_prefix'] == '+') {
$option_price += $option_value_query->row['price'];
} elseif ($option_value_query->row['price_prefix'] == '-') {
$option_price -= $option_value_query->row['price'];
}
}
}
}
}
}
}
return $option_price;
}
public function updatePrice() {
$json = array();
if (isset($this->request->post['product_id'])) {
$product_id = $this->request->post['product_id'];
} else {
$product_id = 0;
}
$this->load->model('catalog/product');
$this->language->load('product/product');
$product_info = $this->model_catalog_product->getProduct($product_id);
if ($product_info) {
if (isset($this->request->post['option'])) {
$option = array_filter($this->request->post['option']);
} else {
$option = array();
}
$option_price = $this->getOptionPrice($product_id, $option);
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$json['price'] = $this->currency->format($this->tax->calculate($product_info['price'] + $option_price, $product_info['tax_class_id'], $this->config->get('config_tax')));
} else {
$json['price'] = false;
}
if ((float)$product_info['special']) {
$json['special'] = $this->currency->format($this->tax->calculate($product_info['special'] + $option_price, $product_info['tax_class_id'], $this->config->get('config_tax')));
} else {
$json['special'] = false;
}
if ($this->config->get('config_tax')) {
$json['tax'] = $this->language->get('text_tax').' '.$this->currency->format((float)$product_info['special'] ? $product_info['special'] + $option_price : $product_info['price'] + $option_price);
} else {
$json['tax'] = false;
}
$this->response->setOutput(json_encode($json));
} else {
return FALSE;
}
}
]]></add>
</operation>
</file>
<!-- VIEW -->
<file name="catalog/view/theme/*/template/product/product.tpl">
<operation>
<search position="replace"><![CDATA[<?php echo $price; ?>]]></search>
<add><![CDATA[<span class="updated-price"><?php echo $price; ?></span>]]></add>
</operation>
<operation>
<search position="before"><![CDATA[<?php echo $footer; ?>]]></search>
<add><![CDATA[<script type="text/javascript"><!--
$('.option').change(function() {
$.ajax({
url: 'index.php?route=product/product/updatePrice',
type: 'post',
data: $('.product-info input[type=\'text\'], .product-info input[type=\'hidden\'], .product-info input[type=\'radio\']:checked, .product-info input[type=\'checkbox\']:checked, .product-info select, .product-info textarea'),
dataType: 'json',
success: function(json) {
//$('.success, .warning, .attention, information, .error').remove();
if (json['price']) {
$('.product-info .updated-price').text(json['price']);
}
if (json['special']) {
$('.product-info .price-new').text(json['special']);
$('.product-info .price-old').text(json['price']);
}
if (json['tax']) {
$('.price-tax').text(json['tax']);
}
}
});
});
//--></script>
]]></add>
</operation>
</file>
</modification>
<id>product - options live update</id>
<version>1.0</version>
<vqmver>2.3.0</vqmver>
<author>vlcekmi3</author>
<!-- CONTROLLER -->
<file name="catalog/controller/product/product.php">
<operation>
<search position="before"><![CDATA[public function index() {]]></search>
<add><![CDATA[
private function getOptionPrice($product_id = 0, $options = array()) {
$option_price = 0;
$product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1'");
if ($product_query->num_rows) {
foreach ($options as $product_option_id => $option_value) {
$option_query = $this->db->query("SELECT po.product_option_id, po.option_id, od.name, o.type FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_option_id = '" . (int)$product_option_id . "' AND po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "'");
if ($option_query->num_rows) {
if ($option_query->row['type'] == 'select' || $option_query->row['type'] == 'radio' || $option_query->row['type'] == 'image') {
$option_value_query = $this->db->query("SELECT pov.option_value_id, ovd.name, pov.quantity, pov.subtract, pov.price, pov.price_prefix, pov.points, pov.points_prefix, pov.weight, pov.weight_prefix FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_option_value_id = '" . (int)$option_value . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
if ($option_value_query->num_rows) {
if ($option_value_query->row['price_prefix'] == '+') {
$option_price += $option_value_query->row['price'];
} elseif ($option_value_query->row['price_prefix'] == '-') {
$option_price -= $option_value_query->row['price'];
}
}
} elseif ($option_query->row['type'] == 'checkbox' && is_array($option_value)) {
foreach ($option_value as $product_option_value_id) {
$option_value_query = $this->db->query("SELECT pov.option_value_id, ovd.name, pov.quantity, pov.subtract, pov.price, pov.price_prefix, pov.points, pov.points_prefix, pov.weight, pov.weight_prefix FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_option_value_id = '" . (int)$product_option_value_id . "' AND pov.product_option_id = '" . (int)$product_option_id . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
if ($option_value_query->num_rows) {
if ($option_value_query->row['price_prefix'] == '+') {
$option_price += $option_value_query->row['price'];
} elseif ($option_value_query->row['price_prefix'] == '-') {
$option_price -= $option_value_query->row['price'];
}
}
}
}
}
}
}
return $option_price;
}
public function updatePrice() {
$json = array();
if (isset($this->request->post['product_id'])) {
$product_id = $this->request->post['product_id'];
} else {
$product_id = 0;
}
$this->load->model('catalog/product');
$this->language->load('product/product');
$product_info = $this->model_catalog_product->getProduct($product_id);
if ($product_info) {
if (isset($this->request->post['option'])) {
$option = array_filter($this->request->post['option']);
} else {
$option = array();
}
$option_price = $this->getOptionPrice($product_id, $option);
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$json['price'] = $this->currency->format($this->tax->calculate($product_info['price'] + $option_price, $product_info['tax_class_id'], $this->config->get('config_tax')));
} else {
$json['price'] = false;
}
if ((float)$product_info['special']) {
$json['special'] = $this->currency->format($this->tax->calculate($product_info['special'] + $option_price, $product_info['tax_class_id'], $this->config->get('config_tax')));
} else {
$json['special'] = false;
}
if ($this->config->get('config_tax')) {
$json['tax'] = $this->language->get('text_tax').' '.$this->currency->format((float)$product_info['special'] ? $product_info['special'] + $option_price : $product_info['price'] + $option_price);
} else {
$json['tax'] = false;
}
$this->response->setOutput(json_encode($json));
} else {
return FALSE;
}
}
]]></add>
</operation>
</file>
<!-- VIEW -->
<file name="catalog/view/theme/*/template/product/product.tpl">
<operation>
<search position="replace"><![CDATA[<?php echo $price; ?>]]></search>
<add><![CDATA[<span class="updated-price"><?php echo $price; ?></span>]]></add>
</operation>
<operation>
<search position="before"><![CDATA[<?php echo $footer; ?>]]></search>
<add><![CDATA[<script type="text/javascript"><!--
$('.option').change(function() {
$.ajax({
url: 'index.php?route=product/product/updatePrice',
type: 'post',
data: $('.product-info input[type=\'text\'], .product-info input[type=\'hidden\'], .product-info input[type=\'radio\']:checked, .product-info input[type=\'checkbox\']:checked, .product-info select, .product-info textarea'),
dataType: 'json',
success: function(json) {
//$('.success, .warning, .attention, information, .error').remove();
if (json['price']) {
$('.product-info .updated-price').text(json['price']);
}
if (json['special']) {
$('.product-info .price-new').text(json['special']);
$('.product-info .price-old').text(json['price']);
}
if (json['tax']) {
$('.price-tax').text(json['tax']);
}
}
});
});
//--></script>
]]></add>
</operation>
</file>
</modification>