Post by akshay@wvs.in » Mon Apr 11, 2016 2:30 pm

Hi,

recently i installed one extension from opencart expension website but this extention is working with only default template not working with theme (http://themeforest.net/item/flaton-resp ... e/12298533)

install.ocmod.xml
-------------------------------------------------------------------------------------------------------------------------------------------------------------

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<modification>
    <name>Live Price Update</name>
    <version>1.0</version>
    <code>live_price_update</code>
    <author>OpenCart FACTORY</author>
    <link>http://www.ocfactory.net</link>
    <file path="catalog/view/theme/*/template/product/product.tpl">        
      <operation>
        <search index="0"><![CDATA[<?php echo $price; ?>]]></search>
        <add position="replace"><![CDATA[<span id="price_old"><?php echo $price; ?></span>]]></add>
      </operation>

      <operation>
        <search><![CDATA[<span style="text-decoration: line-through;"><?php echo $price; ?></span>]]></search>
        <add position="replace"><![CDATA[<span id="price_old" style="text-decoration: line-through;"><?php echo $price; ?></span>]]></add>
      </operation>

      <operation>
        <search><![CDATA[<?php echo $special; ?>]]></search>
        <add position="replace"><![CDATA[<span id="price_special"><?php echo $special; ?></span>]]></add>
      </operation>

      <operation>
        <search><![CDATA[<?php echo $tax; ?>]]></search>
        <add position="replace"><![CDATA[<span id="price_tax"><?php echo $tax; ?></span>]]></add>
      </operation>

      <operation>
        <search><![CDATA[<?php echo $footer; ?>]]></search>
        <add position="before"><![CDATA[<script type="text/javascript" src="index.php?route=product/livepriceupdate/js&product_id=<?php echo $product_id; ?>"></script>]]></add>
      </operation>
    </file>
</modification>
------------------------------------------------------------------------------------------------------------------------------------------------------------------

catalog/controller/product/livepriceupdate.php
-----------------------------------------------------------------------------------------------------------------------------------------------------------------

Code: Select all

<?php 

// Name: 		Live Price Update with Options
// Version: 	1.0
// Author: 		OpenCart FACTORY
// Website:		www.ocfactory.net
	
class ControllerProductLivepriceupdate extends Controller {
	/* ====================================================================================

	SETTINGS

	Below you can find five variables that relate to DOM the structure of the template product/product.tpl. 
	The default values correspond to a default OpenCart theme. 
	If you use customized theme, these containers might have other class or id. In this case you need to clarify their value.

	==================================================================================== */
	
	public $options_container 			= '#product'; 			// in default them it is 			".product-info"
	public $old_price_container		 	= '#price_old'; 			// in default them it is 			".price-old"
	public $tax_price_container 		= '#price_tax'; 			// in default them it is 			".price-tax'"
	public $special_price_container		= '#price_special'; 		// by default this module sets 		"#price_container"
	public $use_cache					= true;						// set FALSE to disable caching (TRUE - enable)
	public $calculate_quantity			= true;						// calculate price with quantity
	
	private $error = array();

	public function index() {
		
		$json = array();
		$update_cache = false;
		$options_makeup = 0;
		
		if (isset($this->request->post['product_id'])) {
			$product_id = (int)$this->request->post['product_id'];
		} else {
			$product_id = 0;
		}
		
		if ($this->calculate_quantity && isset($this->request->post['quantity'])) {
			$quantity = (int)$this->request->post['quantity'];
		} else {
			$quantity = 1;
		}
		
		$this->language->load('product/product');
		$this->load->model('catalog/product');
		
		// Cache name
		if (isset($this->request->post['option']) && is_array($this->request->post['option'])) {
			$options_hash = serialize($this->request->post['option']);
		} else {
			$options_hash = '';
		}
		
		$cache_key = 'live_price_update'. md5($product_id . $quantity. $options_hash . $this->currency->getCode() . $this->session->data['language']);
		
		if (!$this->use_cache || (!$json = $this->cache->get($cache_key))) {
				
			$product_info = $this->model_catalog_product->getProduct($product_id);
			
			// Prepare data
			if ($product_info) {
			
				$update_cache = true;
							
				if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
					//$data['price'] = $this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax'));
                    $data['price'] = $product_info['price'];
                } else {
					$data['price'] = false;
				}
							
				if ((float)$product_info['special']) {
					//$data['special'] = $this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax'));
                    $data['special'] = $product_info['special'];
                } else {
					$data['special'] = false;
				}

				// If some options are selected
				if (isset($this->request->post['option']) && $this->request->post['option']) {
                    foreach ($this->model_catalog_product->getProductOptions($product_id) as $option) {
                        foreach ($option['product_option_value'] as $option_value) {
                            //If options checkbox
                            if(isset($this->request->post['option'][$option['product_option_id']]) && is_array($this->request->post['option'][$option['product_option_id']])) {
                                array_filter($this->request->post['option'][$option['product_option_id']]);
                                foreach($this->request->post['option'][$option['product_option_id']] as $checked_option) {
                                    if ($checked_option == $option_value['product_option_value_id']) {
                                        if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
                                            if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {
                                                //$price = $this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax'));
                                                $price = $option_value['price'];
                                            } else {
                                                $price = false;
                                            }
                                            if ($price) {
                                                if ($option_value['price_prefix'] === '+') {
                                                    $options_makeup = $options_makeup + (float)$price;
                                                } else {
                                                    $options_makeup = $options_makeup - (float)$price;
                                                }
                                            }
                                        }
                                    }
                                }
                            }

                            //If options not checkbox
                            if (isset($this->request->post['option'][$option['product_option_id']]) && $this->request->post['option'][$option['product_option_id']] == $option_value['product_option_value_id']) {
                                if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
                                    if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) {
                                        //$price = $this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax'));
                                        $price = $option_value['price'];
                                    } else {
                                        $price = false;
                                    }
                                    if ($price) {
                                        if ($option_value['price_prefix'] === '+') {
                                            $options_makeup = $options_makeup + (float)$price;
                                        } else {
                                            $options_makeup = $options_makeup - (float)$price;
                                        }
                                    }
                                }
                            }
                        }
                        unset($price);
                    }
				}
				
				if ($data['price']) {
					$json['new_price']['price'] = $this->currency->format($this->tax->calculate(($data['price'] + $options_makeup), $product_info['tax_class_id'], $this->config->get('config_tax')) * $quantity);
				} else {
					$json['new_price']['price'] = false;
				}
				
				if ($data['special']) {
					$json['new_price']['special'] = $this->currency->format($this->tax->calculate(($data['special'] + $options_makeup), $product_info['tax_class_id'], $this->config->get('config_tax')) * $quantity);
				} else {
					$json['new_price']['special'] = false;
				}
		
				if ($this->config->get('config_tax')) {
					$json['new_price']['tax'] = $this->currency->format(((float)$product_info['special'] ? ($product_info['special'] + $options_makeup) : ($product_info['price'] + $options_makeup)) * $quantity );
				} else {
					$json['new_price']['tax'] = false;
				}
				
				$json['success'] = true;
				
			} else {
				$json['success'] = false;
			}
		
		}
		
		if ($update_cache && $this->use_cache) {
			$this->cache->set($cache_key, $json);
		}
		
		echo json_encode($json);
		exit;
  	}

  	function js() {
		
		header('Content-Type: application/javascript');
		
		$js = <<<HTML

			var price_with_options_ajax_call = function() {
				$.ajax({
					type: 'POST',
					url: 'index.php?route=product/livepriceupdate/index',
					data: $('{$this->options_container} input[type=\'text\'], {$this->options_container} input[type=\'hidden\'], {$this->	options_container} input[type=\'radio\']:checked, {$this->options_container} input[type=\'checkbox\']:checked, {$this->options_container} select, {$this->options_container} textarea'),
					dataType: 'json',
						beforeSend: function() {
							// you can add smth useful here
						},
						complete: function() {
							// you can add smth useful here
						},
						success: function(json) {
						if (json.success) {
							animation_on_change_price_with_options('{$this->special_price_container}', json.new_price.special);
							animation_on_change_price_with_options('{$this->tax_price_container}', json.new_price.tax);
							animation_on_change_price_with_options('{$this->old_price_container}', json.new_price.price);
						}
					},
					error: function(error) {
						//console.log(error);
					}
				});
			}
			
			var animation_on_change_price_with_options = function(selector_class_or_id, new_html_content) {
				$(selector_class_or_id).fadeOut(150, function() {
					$(this).html(new_html_content).fadeIn(50);
				});
			}
			
			if ( jQuery.isFunction(jQuery.fn.on) ) 
			{
				$('{$this->options_container} input[type=\'text\'], {$this->options_container} input[type=\'hidden\'], {$this->options_container} input[type=\'radio\'], {$this->options_container} input[type=\'checkbox\'], {$this->options_container} select, {$this->options_container} textarea, {$this->options_container} input[name=\'quantity\']').on('change', function() {
					price_with_options_ajax_call();
				});
			} 
			else 
			{
				$('{$this->options_container} input[type=\'text\'], {$this->options_container} input[type=\'hidden\'], {$this->options_container} input[type=\'radio\'], {$this->options_container} input[type=\'checkbox\'], {$this->options_container} select, {$this->options_container} textarea, {$this->options_container} input[name=\'quantity\']').on('change', function() {
					price_with_options_ajax_call();
				});
			}	

HTML;

		echo $js;
		exit;
	}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------


please help ...

Newbie

Posts

Joined
Mon Apr 11, 2016 2:16 pm
Who is online

Users browsing this forum: No registered users and 7 guests