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

Адаптация модификатора с 2.3 на 3х


Recommended Posts

Здравствуйте. Еще одна попытка что либо адаптировать с 2.3 на 3х. Модификатор не большой, изменяет цену товара при редактирование заказа из админки. Модификатор почти допилил, реагирует на некоторые событья но вот сохранять итоговое значение не хочет. Глаз уже замылился и не могу найти причину, ткните пожалуйста)

 

Скрытый текст
<?xml version="1.0" encoding="UTF-8"?>
<modification>
	<name>Редактирование цены товара в заказе</name>
  	<code>edit-product-price-in-order</code>
  	<version>2.0</version>
  	<author></author>
  	<link></link>

	<file path="admin/controller/sale/order.php">
		<operation error="log">
			<search><![CDATA[/order_form]]></search>
			<add position="before"><![CDATA[
		if (!isset($data['currency_code'])) {
			$data['currency_code'] = isset($order_info['currency_code']) ? $order_info['currency_code'] : $this->config->get('config_currency');
		}
		$data['currency_decimal_place'] = $this->currency->getDecimalPlace($data['currency_code']);
			]]></add>
		</operation>
	</file>

	<file path="admin/view/template/sale/order_form.twig">
		<operation error="log">
			<search index="0"><![CDATA[<td class="text-right">{{ column_price }}</td>]]></search>
			<add position="replace"><![CDATA[<td class="text-right"><span data-original-title="Click Price to Edit" data-toggle="tooltip" title="">{{ column_price }}</span></td>]]></add>
		</operation>
		<operation error="log">
			<search index="0"><![CDATA[<td class="text-right">' + product['price'] + '</td>';]]></search>
			<add position="replace"><![CDATA[<td class="text-right price-editable" data-decimal="' + product['decimal_symbol'] + '" data-product="' + i + '">' + product['price'] + '</td>';]]></add>
		</operation>
		<operation error="log">
			<search><![CDATA[<td class="text-right" colspan="4">' + total['title'] + ':</td>']]></search>
			<add position="replace"><![CDATA[' + (total['code'] == 'shipping' ? '<td class="text-right" colspan="4"><span data-original-title="Click Price to Edit" data-toggle="tooltip" title="">' + total['title'] + ':</span></td>' : '<td class="text-right" colspan="4">' + total['title'] + ':</td>')]]></add>
		</operation>
		<operation error="log">
			<search><![CDATA[<td class="text-right">' + total['text'] + '</td>']]></search>
			<add position="replace"><![CDATA[' + (total['code'] == 'shipping' ? '<td class="text-right price-editable" data-decimal="' + total['decimal_symbol'] + '" data-product="' + total['code'] + '">' + total['text'] + '</td>' : '<td class="text-right">' + total['text'] + '</td>')]]></add>
		</operation>
		<operation error="log">
			<search index="0"><![CDATA[</script]]></search>
			<add position="after"><![CDATA[
<style>
	html.wait, html.wait * {
		cursor: wait !important;
	}
	.price-override {
		width: 70px;
		text-align: center;
	}
	table td.red {
		background:rgba(255,180,170,.7)!important;
	}
	table td {
		-webkit-transition: background-color 300ms linear;
		-moz-transition: background-color 300ms linear;
		-o-transition: background-color 300ms linear;
		-ms-transition: background-color 300ms linear;
		transition: background-color 300ms linear;
	}
	.table td span[data-toggle="tooltip"]::after {
	    font-family: FontAwesome;
	    color: #1E91CF;
	    content: "\f059";
	    margin-left: 4px;
	}
</style>
<style id="temp-style">
</style>
<script type="text/javascript">

var productPrices = {};
var locked = false;
var keyCode;

// Price Override
$('#content').on('click', '.price-editable', function() {

	// Restore Siblings
	$('.price-override').each(function(k,v) {
		var parent = $(this).parent();
		var rowPrice = productPrices[parent.data('product')];
		parent.addClass('price-editable').html(rowPrice);
	});
	
	$(this).removeClass('price-editable');
	var row = $(this).data('product');
	productPrices[row] = $(this).text();
	var decimal_symbol = $(this).data('decimal');
	var regex = new RegExp('[^0-9\\' + decimal_symbol + '-]+', 'g');
	var price = Number(productPrices[row].replace(regex,"").replace(decimal_symbol,'.')).toFixed({{ currency_decimal_place }});
	$(this).html('<input type="text" class="price-override" value="' + price + '" />');
	$(this).find('input').focus().select();
});

$('#content').on('input', '.price-override', function() {
	this.value = this.value.replace(/[^0-9.-]/g, '').replace(/(\..*)\./g, '$1');
}).on('keypress', '.price-override', function(e) {
	if (e.keyCode == 13 || e.keyCode == 27) {
		keyCode = e.keyCode;
		$(this).blur();
	}
}).on('blur', '.price-override', function() {
	var self = this;
	var parent = $(this).parent();
	var rowPrice = productPrices[parent.data('product')];

	if ($(this).closest('tr').find('.btn-danger').length) {
		var key = $(this).closest('tr').find('.btn-danger').val();
	} else {
		var key = parent.data('product');
	}

	parent.removeClass('red');
	$('#temp-style').html('');

if (keyCode != 27 && +rowPrice != +this.value && !locked) {
			var override_url = '{{ catalog }}index.php?route=api/cart/add&api_token={{ api_token }}&store_id=' + $('select[name=\'store_id\'] option:selected').val();
		locked = true;
		$("html").addClass("wait");
		$.ajax({
			url: override_url,
			type: 'post',
			data: 'price=' + self.value + '&key=' + encodeURIComponent(key),
			dataType: 'json',
			crossDomain: true,
			complete: function() {
				$("html").removeClass("wait");
				locked = false;
			},		
			success: function(json) {
				if (json === false) {
					parent.addClass('red price-editable').html(rowPrice);
					setTimeout(function() { parent.removeClass('red'); }, 1000);
				} else {
					$('#button-refresh').click();
					parent.addClass('price-editable').html(json);
					$('#temp-style').html(	"td[data-product='" + parent.data('product') + "'] { background: rgba(130,255,130,.7)!important; }" );
					setTimeout(function() { $('#temp-style').html(''); }, 1000);
				}
			},	
			error: function(xhr, ajaxOptions, thrownError) {
				alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
			}
		});
	} else {
		parent.addClass('price-editable').html(rowPrice);
	}
});
</script>
			]]></add>
		</operation>
	</file>

	<file path="catalog/model/total/shipping.php,catalog/model/extension/total/shipping.php">
		<operation error="log">
			<search><![CDATA[[] = array(]]></search>
			<add position="before"><![CDATA[
			if (isset($this->session->data['price_override']['shipping'])) {
				$this->session->data['shipping_method']['cost'] = $this->session->data['price_override']['shipping'];
			}
			]]></add>
		</operation>
	</file>

	<file path="catalog/controller/api/cart.php">
		<operation error="log">
			<search><![CDATA[extends Controller {]]></search>
			<add position="after"><![CDATA[
	public function price_override() {
		if (array_diff(array('key','price'),array_keys($this->request->post))) {
			$json = false;
		} else {
			$json = $this->currency->format($this->request->post['price'],$this->session->data['currency'],1);
			$calc = $this->currency->format($this->request->post['price'],$this->session->data['currency'],1,false);
			if ($this->request->post['key'] != 'shipping') {
				$cart = $this->cart->getProduct($this->request->post['key']);
				if (!empty($cart)) {
					$key['product_id'] = $cart['product_id'];
					$key['option'] = json_decode($cart['option']);
					$key = base64_encode(serialize($key));
				} else {
					$json = false;
				}
			} else {
				$key = $this->request->post['key'];
				$products = $this->cart->getProducts();
				if (isset($products[$key])) $cart = $products[$key];
			}
			if (isset($key)) {
				if ($this->config->get('config_tax') && !empty($cart)) {
					$tax_class_id = $this->cart->getProductTaxClassId($cart['product_id']);
					if ($tax_class_id) {
						$tax_rates = array_reverse($this->tax->getRates($calc,$tax_class_id));
						if ($tax_rates) {
							foreach ($tax_rates as $tax_rate) {
								if ($tax_rate['type'] == 'F') {
									$calc -= $tax_rate['rate'];
								} elseif ($tax_rate['type'] == 'P') {
									$calc /= ($tax_rate['rate'] + 100) / 100;
								}
							}
							$this->request->post['price'] = $calc;
							$json = $this->currency->format($this->request->post['price'],$this->session->data['currency'],1);
						}
					}
				}
				$this->session->data['price_override'][$key] = $this->currency->convert($this->request->post['price'],$this->session->data['currency'],$this->config->get('config_currency'));
			}
		}
		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
	}
			]]></add>
		</operation>
		<operation error="log">
			<search><![CDATA[$json['products'][] = array(]]></search>
			<add position="after"><![CDATA[
					'decimal_symbol'	=> $this->language->get('decimal_point'),
			]]></add>
		</operation>
		<operation error="log">
			<search><![CDATA['title' => $total['title'],]]></search>
			<add position="before"><![CDATA[
					'code' 				=> $total['code'],
					'decimal_symbol'	=> $this->language->get('decimal_point'),
			]]></add>
		</operation>
	</file>

	<file path="system/library/cart.php">
		<operation error="log">
			<search><![CDATA[// Stock]]></search>
			<add position="before"><![CDATA[
						$key_parts = array(
							'product_id'	=> $cart['product_id'],
							'option'		=> json_decode($cart['option'])
						);
						$key = base64_encode(serialize($key_parts));
					if (isset($this->session->data['price_override'][$key])) {
						$price = $this->session->data['price_override'][$key];
						$option_price = 0;
					}
			]]></add>
		</operation>
		<operation error="log">
			<search><![CDATA[class Cart {]]></search>
			<add position="after"><![CDATA[
	public function getProduct($cart_id) {
		return $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE cart_id = '" . (int)$cart_id . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'")->row;
	}
	public function getProductTaxClassId($product_id) {
		$row = $this->db->query("SELECT tax_class_id FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "'")->row;
		return $row ? $row['tax_class_id'] : false;
	}
			]]></add>
		</operation>
	</file>
	<file path="system/library/cart/cart.php">
		<operation error="log">
			<search><![CDATA[$product_data[] = array(]]></search>
			<add position="before"><![CDATA[
					$key_parts = array(
						'product_id'	=> $cart['product_id'],
						'option'		=> json_decode($cart['option'])
					);
					$key = base64_encode(serialize($key_parts));
					if (isset($this->session->data['price_override'][$key])) {
						$price = $this->session->data['price_override'][$key];
						$option_price = 0;
						$allprice = $price + $option_price;
					}
			]]></add>
		</operation>
		<operation error="log">
			<search><![CDATA[class Cart {]]></search>
			<add position="after"><![CDATA[
	public function getProduct($cart_id) {
		return $this->db->query("SELECT * FROM " . DB_PREFIX . "cart WHERE cart_id = '" . (int)$cart_id . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'")->row;
	}
	public function getProductTaxClassId($product_id) {
		$row = $this->db->query("SELECT tax_class_id FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "'")->row;
		return $row ? $row['tax_class_id'] : false;
	}
			]]></add>
		</operation>
	</file>
</modification>

 

 

Змінено користувачем Malhaz
Надіслати
Поділитися на інших сайтах


Я вас зрозумів де ви це знайшли

Але ж поруч був і під 3-ку

Тримайте:

 

 

Скрытый текст
<?xml version="1.0" encoding="UTF-8"?>
<modification>
   <name>Редактирование цены товара в заказе</name>
   <code>edit-product-price-in-order</code>
   <version>2.0</version>
   <author></author>
   <link></link>
 
   <file path="catalog/language/{ru-ru,russian}/api/cart.php">
      <operation>
         <search><![CDATA[$_['error_required']]]></search>
         <add position="after"><![CDATA[
         
         $_['error_numeric'] = 'Ошибка: цена должна быть числовым значением!';
         
         ]]></add>
      </operation>      
   </file>
   <file path="catalog/language/{en-gb,english}/api/cart.php">
      <operation>
         <search><![CDATA[$_['error_required']]]></search>
         <add position="after"><![CDATA[
         
         $_['error_numeric'] = 'Error: Price should be a numeric value!';
         
         ]]></add>
      </operation>      
   </file>
 
    <file path="system/{library,library/cart}/cart.php">
      <operation>
         <search><![CDATA[$recurring_query =]]></search>
         <add position="before"><![CDATA[
         
         $order_edit = $this->db->query("SELECT * FROM ".DB_PREFIX."order_cart WHERE product_id = '".(int)$product_query->row['product_id']."'");
 
            if ($order_edit->num_rows) {
            $price = $order_edit->row["price"];
         }
         
         ]]></add>
      </operation>
   </file>
                             
   <file path="admin/model/sale/order.php">
      <operation>
         <search><![CDATA[ModelSaleOrder extends Model {]]></search>
            <add position="after"><![CDATA[
           
         public function checkOrderCartTable()
         {
            $this->db->query("CREATE TABLE IF NOT EXISTS `".DB_PREFIX."order_cart` (
               `order_cart_id` int(11) NOT NULL AUTO_INCREMENT,
               `product_id` int(11) NOT NULL,
               `price` decimal(15,4) NOT NULL,
               PRIMARY KEY(`order_cart_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8");
         }
             
         public function deleteOrderCart()
         {
            $this->db->query("DELETE FROM ".DB_PREFIX."order_cart");
         }
                 
         ]]></add>
      </operation>
   </file>
                               
   <file path="admin/controller/sale/order.php">
      <operation>
         <search><![CDATA[sale/order_form]]></search>
            <add position="before"><![CDATA[
           
            $this->model_sale_order->checkOrderCartTable();
            $this->model_sale_order->deleteOrderCart();
           
            $data['button_refresh'] = $this->language->get('button_refresh');
           
            $data['catalog'] = $this->request->server['HTTPS'] ? HTTPS_CATALOG : HTTP_CATALOG;
         
         if (!isset($data['api_token'])) {
            if (!isset($data['user_token']) && version_compare(VERSION, '3', '>=')) {
               $data['user_token'] = $this->session->data['user_token'];
            } elseif (!isset($data['token'])) {
               $data['token'] = $this->session->data['token'];
            }
         }
         
         ]]></add>
      </operation>
   </file>
 
   <file path="admin/view/template/sale/order_form.tpl">
      <operation>
         <search index="0"><![CDATA[<td class="text-right">' + product['price'] + '</td>]]></search>
         <add position="replace"><![CDATA[<td class="text-right"><div class="input-group" style="max-width: 200px;"><input type="text" id="product-price-' + product['product_id'] + '" value="' + product['original_price'] + '" class="form-control" /><span class="input-group-btn"><button type="button" id="button-refresh-price-' + product['product_id'] + '" data-toggle="tooltip" title="" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-success refresh-price" data-original-title="<?php echo $button_refresh; ?>"><i class="fa fa-refresh"></i></button></span></div></td>]]></add>
      </operation>
      <operation>
         <search><![CDATA[<?php echo $footer; ?>]]></search>
         <add position="before"><![CDATA[
         
         <script type="text/javascript">
         
         $('#content').delegate("button.refresh-price", "click", function()
         {
               product_id = $(this).attr("id").replace("button-refresh-price-", "");
 
            <?php if (version_compare(VERSION, '2.1', '>=')) { ?>
               cart_url = "<?php echo $catalog; ?>index.php?route=api/cart/updateprice";
            <?php } else { ?>
               cart_url = "index.php?route=sale/order/api&api=api/cart/updateprice";
            <?php } ?>
         
            <?php if (isset($token)) { ?>
               if (typeof token != 'undefined') cart_token = "&token=" + token;
               else cart_token = "&token=<?php echo $token; ?>";
            <?php } ?>
           
            if ($("select[name='store_id']").length > 0) {
               cart_store = $("select[name='store_id'] option:selected").val();
            } else {
               cart_store = 0;
            }
         
               $.ajax({
               url: cart_url + '&store_id=' + cart_store + cart_token,              
                    type: "post",
                    data: {"product_id": product_id, "price": $("#product-price-" + product_id).val()},
                    dataType: "json",
                    beforeSend: function() {
                     $("#button-product-add").button("loading");
               },
               complete: function() {
                     $("#button-product-add").button("reset");
               },
               success: function(json) {
                     $(".alert, .text-danger").remove();
                     $(".form-group").removeClass("has-error");
 
                     if (json["error"]) {
                        $("#content > .container-fluid").prepend("<div class='alert alert-danger'><i class='fa fa-exclamation-circle'></i> " + json["error"] + " <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
                     } else {
                     $("#content > .container-fluid").prepend("<div class='alert alert-success'><i class='fa fa-check-circle'></i> " + json["success"] + " <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
                     
                     $("#button-refresh").trigger("click");
                  }
               },
                    error: function(xhr, ajaxOptions, thrownError) {
                  alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
               }
            });
         });
                             
         </script>
         
         <!--CART PLACEHOLDER-->
         
         ]]></add>
      </operation>      
   </file>
   
   <file path="admin/view/template/sale/order_form.twig">
      <operation>
         <search index="0"><![CDATA[<td class="text-right">' + product['price'] + '</td>]]></search>
         <add position="replace"><![CDATA[<td class="text-right"><div class="input-group" style="max-width: 200px;"><input type="text" id="product-price-' + product['product_id'] + '" value="' + product['original_price'] + '" class="form-control" /><span class="input-group-btn"><button type="button" id="button-refresh-price-' + product['product_id'] + '" data-toggle="tooltip" title="" data-loading-text="{{ text_loading }}" class="btn btn-success refresh-price" data-original-title="{{ button_refresh }}"><i class="fa fa-refresh"></i></button></span></div></td>]]></add>
      </operation>
      <operation>
         <search><![CDATA[{{ footer }}]]></search>
         <add position="before"><![CDATA[
         
         <script type="text/javascript">
         
         $('#content').delegate("button.refresh-price", "click", function()
         {
               product_id = $(this).attr("id").replace("button-refresh-price-", "");
         
            cart_url = "{{ catalog }}index.php?route=api/cart/updateprice";
         
            {% if api_token %}
               if (typeof api_token != 'undefined') cart_token = "&api_token=" + api_token;
               else cart_token = "&api_token={{ api_token }}";
            {% elseif user_token %}
               if (typeof user_token != 'undefined') cart_token = "&user_token=" + user_token;
               else cart_token = "&user_token={{ user_token }}";
            {% endif %}
           
            if ($("select[name='store_id']").length > 0) {
               cart_store = $("select[name='store_id'] option:selected").val();
            } else {
               cart_store = 0;
            }
         
               $.ajax({
               url: cart_url + '&store_id=' + cart_store + cart_token,              
                    type: "post",
                    data: {"product_id": product_id, "price": $("#product-price-" + product_id).val()},
                    dataType: "json",
                    beforeSend: function() {
                     $("#button-product-add").button("loading");
               },
               complete: function() {
                     $("#button-product-add").button("reset");
               },
               success: function(json) {
                     $(".alert, .text-danger").remove();
                     $(".form-group").removeClass("has-error");
 
                     if (json["error"]) {
                        $("#content > .container-fluid").prepend("<div class='alert alert-danger'><i class='fa fa-exclamation-circle'></i> " + json["error"] + " <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
                     } else {
                     $("#content > .container-fluid").prepend("<div class='alert alert-success'><i class='fa fa-check-circle'></i> " + json["success"] + " <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
                     
                     $("#button-refresh").trigger("click");
                  }
               },
                    error: function(xhr, ajaxOptions, thrownError) {
                  alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
               }
            });
         });
                             
         </script>
         
         <!--CART PLACEHOLDER-->
         
         ]]></add>
      </operation>
   </file>
     
   <file path="catalog/controller/api/cart.php">
      <operation>
         <search><![CDATA[ControllerApiCart extends Controller {]]></search>
         <add position="after"><![CDATA[
         
         public function updatePrice()
         {
            $this->load->language('api/cart');
 
            $json = array();
 
            if (!isset($this->session->data['api_id'])) {
               $json['error']['warning'] = $this->language->get('error_permission');
            } elseif (is_numeric($this->request->post['price'])) {
               $this->db->query("DELETE FROM ".DB_PREFIX."order_cart WHERE product_id = '".$this->request->post['product_id']."'");
               $this->db->query("INSERT INTO ".DB_PREFIX."order_cart SET product_id = '".$this->request->post['product_id']."', price = '".$this->request->post['price']."'");
                             
               $json['success'] = $this->language->get('text_success');
            } else {
               $json['error'] = $this->language->get('error_numeric');
            }
           
            if (isset($this->request->server['HTTP_ORIGIN'])) {
               $this->response->addHeader('Access-Control-Allow-Origin: '.$this->request->server['HTTP_ORIGIN']);
               $this->response->addHeader('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
               $this->response->addHeader('Access-Control-Max-Age: 1000');
               $this->response->addHeader('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
            }
 
            $this->response->addHeader('Content-Type: application/json');
            $this->response->setOutput(json_encode($json));          
         }
           
         ]]></add>
      </operation>
      <operation>
         <search><![CDATA[$json['products'][] = array(]]></search>
         <add position="after"><![CDATA[    
         
         'original_price' => $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')),
         
         ]]></add>
      </operation>      
   </file>
</modification>

 

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


Але краще всього не змінювати ціну, а надавати клієнту знижку!

 

Це добре зробить цей безкоштовний модуль та щей вартість доставки можно змінити

 

 

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


27.02.2023 в 22:09, Desserro сказал:

Тільки зайве приберіть

Те що для 2 версії

 

А бо ви хотіли повчитись на цьому!? То вибачайте якщо що!

Разобрался еще вчера. Все работает отлично изменив ссылку в данной строке:
 

var override_url = '{{ catalog }}index.php?route=api/cart/price_override&api_token={{ api_token }}&store_id=' + $('select[name=\'store_id\'] option:selected').val();
		locked = true;

 

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


27.02.2023 в 21:49, Desserro сказал:

Я вас зрозумів де ви це знайшли

Але ж поруч був і під 3-ку

Тримайте:

 

 

  Показать содержимое
<?xml version="1.0" encoding="UTF-8"?>
<modification>
   <name>Редактирование цены товара в заказе</name>
   <code>edit-product-price-in-order</code>
   <version>2.0</version>
   <author></author>
   <link></link>
 
   <file path="catalog/language/{ru-ru,russian}/api/cart.php">
      <operation>
         <search><![CDATA[$_['error_required']]]></search>
         <add position="after"><![CDATA[
         
         $_['error_numeric'] = 'Ошибка: цена должна быть числовым значением!';
         
         ]]></add>
      </operation>      
   </file>
   <file path="catalog/language/{en-gb,english}/api/cart.php">
      <operation>
         <search><![CDATA[$_['error_required']]]></search>
         <add position="after"><![CDATA[
         
         $_['error_numeric'] = 'Error: Price should be a numeric value!';
         
         ]]></add>
      </operation>      
   </file>
 
    <file path="system/{library,library/cart}/cart.php">
      <operation>
         <search><![CDATA[$recurring_query =]]></search>
         <add position="before"><![CDATA[
         
         $order_edit = $this->db->query("SELECT * FROM ".DB_PREFIX."order_cart WHERE product_id = '".(int)$product_query->row['product_id']."'");
 
            if ($order_edit->num_rows) {
            $price = $order_edit->row["price"];
         }
         
         ]]></add>
      </operation>
   </file>
                             
   <file path="admin/model/sale/order.php">
      <operation>
         <search><![CDATA[ModelSaleOrder extends Model {]]></search>
            <add position="after"><![CDATA[
           
         public function checkOrderCartTable()
         {
            $this->db->query("CREATE TABLE IF NOT EXISTS `".DB_PREFIX."order_cart` (
               `order_cart_id` int(11) NOT NULL AUTO_INCREMENT,
               `product_id` int(11) NOT NULL,
               `price` decimal(15,4) NOT NULL,
               PRIMARY KEY(`order_cart_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8");
         }
             
         public function deleteOrderCart()
         {
            $this->db->query("DELETE FROM ".DB_PREFIX."order_cart");
         }
                 
         ]]></add>
      </operation>
   </file>
                               
   <file path="admin/controller/sale/order.php">
      <operation>
         <search><![CDATA[sale/order_form]]></search>
            <add position="before"><![CDATA[
           
            $this->model_sale_order->checkOrderCartTable();
            $this->model_sale_order->deleteOrderCart();
           
            $data['button_refresh'] = $this->language->get('button_refresh');
           
            $data['catalog'] = $this->request->server['HTTPS'] ? HTTPS_CATALOG : HTTP_CATALOG;
         
         if (!isset($data['api_token'])) {
            if (!isset($data['user_token']) && version_compare(VERSION, '3', '>=')) {
               $data['user_token'] = $this->session->data['user_token'];
            } elseif (!isset($data['token'])) {
               $data['token'] = $this->session->data['token'];
            }
         }
         
         ]]></add>
      </operation>
   </file>
 
   <file path="admin/view/template/sale/order_form.tpl">
      <operation>
         <search index="0"><![CDATA[<td class="text-right">' + product['price'] + '</td>]]></search>
         <add position="replace"><![CDATA[<td class="text-right"><div class="input-group" style="max-width: 200px;"><input type="text" id="product-price-' + product['product_id'] + '" value="' + product['original_price'] + '" class="form-control" /><span class="input-group-btn"><button type="button" id="button-refresh-price-' + product['product_id'] + '" data-toggle="tooltip" title="" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-success refresh-price" data-original-title="<?php echo $button_refresh; ?>"><i class="fa fa-refresh"></i></button></span></div></td>]]></add>
      </operation>
      <operation>
         <search><![CDATA[<?php echo $footer; ?>]]></search>
         <add position="before"><![CDATA[
         
         <script type="text/javascript">
         
         $('#content').delegate("button.refresh-price", "click", function()
         {
               product_id = $(this).attr("id").replace("button-refresh-price-", "");
 
            <?php if (version_compare(VERSION, '2.1', '>=')) { ?>
               cart_url = "<?php echo $catalog; ?>index.php?route=api/cart/updateprice";
            <?php } else { ?>
               cart_url = "index.php?route=sale/order/api&api=api/cart/updateprice";
            <?php } ?>
         
            <?php if (isset($token)) { ?>
               if (typeof token != 'undefined') cart_token = "&token=" + token;
               else cart_token = "&token=<?php echo $token; ?>";
            <?php } ?>
           
            if ($("select[name='store_id']").length > 0) {
               cart_store = $("select[name='store_id'] option:selected").val();
            } else {
               cart_store = 0;
            }
         
               $.ajax({
               url: cart_url + '&store_id=' + cart_store + cart_token,              
                    type: "post",
                    data: {"product_id": product_id, "price": $("#product-price-" + product_id).val()},
                    dataType: "json",
                    beforeSend: function() {
                     $("#button-product-add").button("loading");
               },
               complete: function() {
                     $("#button-product-add").button("reset");
               },
               success: function(json) {
                     $(".alert, .text-danger").remove();
                     $(".form-group").removeClass("has-error");
 
                     if (json["error"]) {
                        $("#content > .container-fluid").prepend("<div class='alert alert-danger'><i class='fa fa-exclamation-circle'></i> " + json["error"] + " <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
                     } else {
                     $("#content > .container-fluid").prepend("<div class='alert alert-success'><i class='fa fa-check-circle'></i> " + json["success"] + " <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
                     
                     $("#button-refresh").trigger("click");
                  }
               },
                    error: function(xhr, ajaxOptions, thrownError) {
                  alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
               }
            });
         });
                             
         </script>
         
         <!--CART PLACEHOLDER-->
         
         ]]></add>
      </operation>      
   </file>
   
   <file path="admin/view/template/sale/order_form.twig">
      <operation>
         <search index="0"><![CDATA[<td class="text-right">' + product['price'] + '</td>]]></search>
         <add position="replace"><![CDATA[<td class="text-right"><div class="input-group" style="max-width: 200px;"><input type="text" id="product-price-' + product['product_id'] + '" value="' + product['original_price'] + '" class="form-control" /><span class="input-group-btn"><button type="button" id="button-refresh-price-' + product['product_id'] + '" data-toggle="tooltip" title="" data-loading-text="{{ text_loading }}" class="btn btn-success refresh-price" data-original-title="{{ button_refresh }}"><i class="fa fa-refresh"></i></button></span></div></td>]]></add>
      </operation>
      <operation>
         <search><![CDATA[{{ footer }}]]></search>
         <add position="before"><![CDATA[
         
         <script type="text/javascript">
         
         $('#content').delegate("button.refresh-price", "click", function()
         {
               product_id = $(this).attr("id").replace("button-refresh-price-", "");
         
            cart_url = "{{ catalog }}index.php?route=api/cart/updateprice";
         
            {% if api_token %}
               if (typeof api_token != 'undefined') cart_token = "&api_token=" + api_token;
               else cart_token = "&api_token={{ api_token }}";
            {% elseif user_token %}
               if (typeof user_token != 'undefined') cart_token = "&user_token=" + user_token;
               else cart_token = "&user_token={{ user_token }}";
            {% endif %}
           
            if ($("select[name='store_id']").length > 0) {
               cart_store = $("select[name='store_id'] option:selected").val();
            } else {
               cart_store = 0;
            }
         
               $.ajax({
               url: cart_url + '&store_id=' + cart_store + cart_token,              
                    type: "post",
                    data: {"product_id": product_id, "price": $("#product-price-" + product_id).val()},
                    dataType: "json",
                    beforeSend: function() {
                     $("#button-product-add").button("loading");
               },
               complete: function() {
                     $("#button-product-add").button("reset");
               },
               success: function(json) {
                     $(".alert, .text-danger").remove();
                     $(".form-group").removeClass("has-error");
 
                     if (json["error"]) {
                        $("#content > .container-fluid").prepend("<div class='alert alert-danger'><i class='fa fa-exclamation-circle'></i> " + json["error"] + " <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
                     } else {
                     $("#content > .container-fluid").prepend("<div class='alert alert-success'><i class='fa fa-check-circle'></i> " + json["success"] + " <button type='button' class='close' data-dismiss='alert'>&times;</button></div>");
                     
                     $("#button-refresh").trigger("click");
                  }
               },
                    error: function(xhr, ajaxOptions, thrownError) {
                  alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
               }
            });
         });
                             
         </script>
         
         <!--CART PLACEHOLDER-->
         
         ]]></add>
      </operation>
   </file>
     
   <file path="catalog/controller/api/cart.php">
      <operation>
         <search><![CDATA[ControllerApiCart extends Controller {]]></search>
         <add position="after"><![CDATA[
         
         public function updatePrice()
         {
            $this->load->language('api/cart');
 
            $json = array();
 
            if (!isset($this->session->data['api_id'])) {
               $json['error']['warning'] = $this->language->get('error_permission');
            } elseif (is_numeric($this->request->post['price'])) {
               $this->db->query("DELETE FROM ".DB_PREFIX."order_cart WHERE product_id = '".$this->request->post['product_id']."'");
               $this->db->query("INSERT INTO ".DB_PREFIX."order_cart SET product_id = '".$this->request->post['product_id']."', price = '".$this->request->post['price']."'");
                             
               $json['success'] = $this->language->get('text_success');
            } else {
               $json['error'] = $this->language->get('error_numeric');
            }
           
            if (isset($this->request->server['HTTP_ORIGIN'])) {
               $this->response->addHeader('Access-Control-Allow-Origin: '.$this->request->server['HTTP_ORIGIN']);
               $this->response->addHeader('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
               $this->response->addHeader('Access-Control-Max-Age: 1000');
               $this->response->addHeader('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
            }
 
            $this->response->addHeader('Content-Type: application/json');
            $this->response->setOutput(json_encode($json));          
         }
           
         ]]></add>
      </operation>
      <operation>
         <search><![CDATA[$json['products'][] = array(]]></search>
         <add position="after"><![CDATA[    
         
         'original_price' => $this->tax->calculate($product['price'], $product['tax_class_id'], $this->config->get('config_tax')),
         
         ]]></add>
      </operation>      
   </file>
</modification>

 

Изначально этот модификатор и поставил, но он очень плохо работает если у магазина несколько валют. По этому и принял решение адаптировать тот что знаю на практике что работает отлично. Спасибо

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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