To achieve this feature you need to override magento core function follow the steps:
1. First, we need to create a module enabler file. Create a file “app/etc/modules/Sushant_Catalog.xml”
<?xml version="1.0"?> <config> <modules> <Sushant_Catalog> <active>true</active> <codePool>local</codePool> </Sushant_Catalog> </modules> </config>
2. Next, we need to create a module configuration file. Create “app/code/local/Sushant/Catalog/etc/config.xml” and paste the following contents in that file.
<?xml version="1.0"?> <config> <modules> <Sushant_Catalog> <version>1.0</version> </Sushant_Catalog> </modules> <global> <blocks> <catalog> <rewrite> <product_view_type_configurable>Sushant_Catalog_Block_Product_View_Type_Configurable</product_view_type_configurable> </rewrite> </catalog> </blocks> </global> </config>
3. We need to define a block class Sushant_Catalog_Block_Product_View_Type_Configurable. Let’s create a block file “app/code/local/Sushant/Catalog/Block/Product/View/Type/Configurable” with the following contents.
<?php class Sushant_Catalog_Block_Product_View_Type_Configurable extends Mage_Catalog_Block_Product_View_Type_Configurable { public function getJsonConfig() { $attributes = array(); $options = array(); $store = $this->getCurrentStore(); $taxHelper = Mage::helper('tax'); $currentProduct = $this->getProduct(); $preconfiguredFlag = $currentProduct->hasPreconfiguredValues(); if ($preconfiguredFlag) { $preconfiguredValues = $currentProduct->getPreconfiguredValues(); $defaultValues = array(); } foreach ($this->getAllowProducts() as $product) { $productId = $product->getId(); foreach ($this->getAllowAttributes() as $attribute) { $productAttribute = $attribute->getProductAttribute(); $productAttributeId = $productAttribute->getId(); $attributeValue = $product->getData($productAttribute->getAttributeCode()); if (!isset($options[$productAttributeId])) { $options[$productAttributeId] = array(); } if (!isset($options[$productAttributeId][$attributeValue])) { $options[$productAttributeId][$attributeValue] = array(); } $options[$productAttributeId][$attributeValue][] = $productId; } } $this->_resPrices = array( $this->_preparePrice($currentProduct->getFinalPrice()) ); foreach ($this->getAllowAttributes() as $attribute) { $productAttribute = $attribute->getProductAttribute(); $attributeId = $productAttribute->getId(); $info = array( 'id' => $productAttribute->getId(), 'code' => $productAttribute->getAttributeCode(), 'label' => $attribute->getLabel(), 'options' => array() ); $optionPrices = array(); $prices = $attribute->getPrices(); if (is_array($prices)) { foreach ($prices as $value) { if(!$this->_validateAttributeValue($attributeId, $value, $options)) { // continue; $inStock = false; } $currentProduct->setConfigurablePrice( $this->_preparePrice($value['pricing_value'], $value['is_percent']) ); $currentProduct->setParentId(true); Mage::dispatchEvent( 'catalog_product_type_configurable_price', array('product' => $currentProduct) ); $configurablePrice = $currentProduct->getConfigurablePrice(); if (isset($options[$attributeId][$value['value_index']])) { $productsIndex = $options[$attributeId][$value['value_index']]; } else { $productsIndex = array(); } $info['options'][] = array( 'id' => $value['value_index'], 'label' => $value['label'], 'price' => $configurablePrice, 'oldPrice' => $this->_prepareOldPrice($value['pricing_value'], $value['is_percent']), 'products' => $productsIndex, 'stock' => $inStock ); $optionPrices[] = $configurablePrice; } } /** * Prepare formated values for options choose */ foreach ($optionPrices as $optionPrice) { foreach ($optionPrices as $additional) { $this->_preparePrice(abs($additional-$optionPrice)); } } if($this->_validateAttributeInfo($info)) { $attributes[$attributeId] = $info; } // Add attribute default value (if set) if ($preconfiguredFlag) { $configValue = $preconfiguredValues->getData('super_attribute/' . $attributeId); if ($configValue) { $defaultValues[$attributeId] = $configValue; } } } $taxCalculation = Mage::getSingleton('tax/calculation'); if (!$taxCalculation->getCustomer() && Mage::registry('current_customer')) { $taxCalculation->setCustomer(Mage::registry('current_customer')); } $_request = $taxCalculation->getDefaultRateRequest(); $_request->setProductClassId($currentProduct->getTaxClassId()); $defaultTax = $taxCalculation->getRate($_request); $_request = $taxCalculation->getRateRequest(); $_request->setProductClassId($currentProduct->getTaxClassId()); $currentTax = $taxCalculation->getRate($_request); $taxConfig = array( 'includeTax' => $taxHelper->priceIncludesTax(), 'showIncludeTax' => $taxHelper->displayPriceIncludingTax(), 'showBothPrices' => $taxHelper->displayBothPrices(), 'defaultTax' => $defaultTax, 'currentTax' => $currentTax, 'inclTaxTitle' => Mage::helper('catalog')->__('Incl. Tax') ); $config = array( 'attributes' => $attributes, 'template' => str_replace('%s', '#{price}', $store->getCurrentCurrency()->getOutputFormat()), 'basePrice' => $this->_registerJsPrice($this->_convertPrice($currentProduct->getFinalPrice())), 'oldPrice' => $this->_registerJsPrice($this->_convertPrice($currentProduct->getPrice())), 'productId' => $currentProduct->getId(), 'chooseText' => Mage::helper('catalog')->__('Choose an Option...'), 'taxConfig' => $taxConfig ); if ($preconfiguredFlag && !empty($defaultValues)) { $config['defaultValues'] = $defaultValues; } $config = array_merge($config, $this->_getAdditionalConfig()); return Mage::helper('core')->jsonEncode($config); } }
0 Comments