XML 写法
<!--块 函数--> <blocks> <weicot> <class>Aps_Weicot_Block</class> </weicot> </blocks> <.....> <events> <checkout_cart_product_add_after> <observers> <produts_price_update> <class>Aps_Weicot_Model_Observer</class> <method>productsPriceUpdate</method> </produts_price_update> </observers> </checkout_cart_product_add_after> </events> <.....> <models>
购物车页面价格控制
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/4/28 0028 * Time: 08:52 */ class Aps_Weicot_Model_Observer{ public function productsPriceUpdate(Varien_Event_Observer $obs) { // var_dump($obs); // Get the quote item $item = $obs->getQuoteItem(); // Ensure we have the parent item, if it has one $item = ( $item->getParentItem() ? $item->getParentItem() : $item ); // Load the custom price // var_dump($item->getProduct()->getCategoryIds()); // die('here'); Mage::log($item->getProduct()->getCategoryIds(),null,"catalog.log"); if( $item->getProduct()->getCategoryIds()[0]<'60' ){ $price = $this->_getPriceByItem($item); // Set the custom price $item->setCustomPrice($price); $item->setOriginalCustomPrice($price); // Enable super mode on the product. $item->getProduct()->setIsSuperMode(true); } } protected function _getPriceByItem(Mage_Sales_Model_Quote_Item $item) { $price="99"; //use $item to determine your custom price. return $price; } }
产品页面价格规则 调用的 JSON 数据
/** * Created by PhpStorm. * User: Administrator * Date: 2016/4/28 0028 * app\design\frontend\rwd\default\template\catalog\product\view.phtml */ /** * Product view template * * @see Mage_Catalog_Block_Product_View * @see Mage_Review_Block_Product_View */ ?> <?php $_helper = $this->helper('catalog/output'); ?> <?php $_product = $this->getProduct(); ?> <script type="text/javascript"> var optionsPrice = new Product.OptionsPrice(<?php echo $this->getJsonConfig() ?>); </script>
通过全局搜索 function getJsonConfig() 可得调用方法
/** * Created by PhpStorm. * User: Administrator * Date: 2016/4/28 0028 * app\code\core\Mage\Catalog\Block\Product\View.php */ public function getJsonConfig() { $config = array(); if (!$this->hasOptions()) { return Mage::helper('core')->jsonEncode($config); } $_request = Mage::getSingleton('tax/calculation')->getDefaultRateRequest(); /* @var $product Mage_Catalog_Model_Product */ $product = $this->getProduct(); $_request->setProductClassId($product->getTaxClassId()); $defaultTax = Mage::getSingleton('tax/calculation')->getRate($_request); $_request = Mage::getSingleton('tax/calculation')->getRateRequest(); $_request->setProductClassId($product->getTaxClassId()); $currentTax = Mage::getSingleton('tax/calculation')->getRate($_request); $_regularPrice = $product->getPrice(); $_finalPrice = $product->getFinalPrice(); if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) { $_priceInclTax = Mage::helper('tax')->getPrice($product, $_finalPrice, true, null, null, null, null, null, false); $_priceExclTax = Mage::helper('tax')->getPrice($product, $_finalPrice, false, null, null, null, null, null, false); } else { $_priceInclTax = Mage::helper('tax')->getPrice($product, $_finalPrice, true); $_priceExclTax = Mage::helper('tax')->getPrice($product, $_finalPrice); } $_tierPrices = array(); $_tierPricesInclTax = array(); foreach ($product->getTierPrice() as $tierPrice) { $_tierPrices[] = Mage::helper('core')->currency( Mage::helper('tax')->getPrice($product, (float)$tierPrice['website_price'], false) - $_priceExclTax , false, false); $_tierPricesInclTax[] = Mage::helper('core')->currency( Mage::helper('tax')->getPrice($product, (float)$tierPrice['website_price'], true) - $_priceInclTax , false, false); } $config = array( 'productId' => $product->getId(), 'priceFormat' => Mage::app()->getLocale()->getJsPriceFormat(), 'includeTax' => Mage::helper('tax')->priceIncludesTax() ? 'true' : 'false', 'showIncludeTax' => Mage::helper('tax')->displayPriceIncludingTax(), 'showBothPrices' => Mage::helper('tax')->displayBothPrices(), 'productPrice' => Mage::helper('core')->currency($_finalPrice, false, false), 'productOldPrice' => Mage::helper('core')->currency($_regularPrice, false, false), 'priceInclTax' => Mage::helper('core')->currency($_priceInclTax, false, false), 'priceExclTax' => Mage::helper('core')->currency($_priceExclTax, false, false), /** * @var skipCalculate * @deprecated after 1.5.1.0 */ 'skipCalculate' => ($_priceExclTax != $_priceInclTax ? 0 : 1), 'defaultTax' => $defaultTax, 'currentTax' => $currentTax, 'idSuffix' => '_clone', 'oldPlusDisposition' => 0, 'plusDisposition' => 0, 'plusDispositionTax' => 0, 'oldMinusDisposition' => 0, 'minusDisposition' => 0, 'tierPrices' => $_tierPrices, 'tierPricesInclTax' => $_tierPricesInclTax, ); $responseObject = new Varien_Object(); Mage::dispatchEvent('catalog_product_view_config', array('response_object' => $responseObject)); if (is_array($responseObject->getAdditionalOptions())) { foreach ($responseObject->getAdditionalOptions() as $option => $value) { $config[$option] = $value; } } return Mage::helper('core')->jsonEncode($config); }
通过 Mage::helper(‘core’)->jsonEncode($config) 可获的 生成数据
/** * Created by PhpStorm. * User: Administrator * Date: 2016/4/28 0028 * 无特价 */ var optionsPrice = new Product.OptionsPrice({ "productId": "270", "priceFormat": { "pattern": "\uffe5\u00a0%s", "precision": 2, "requiredPrecision": 2, "decimalSymbol": ".", "groupSymbol": ",", "groupLength": 3, "integerRequired": 1 }, "includeTax": "false", "showIncludeTax": false, "showBothPrices": false, "productPrice": 18.19, "productOldPrice": 18.19, "priceInclTax": 18.19, "priceExclTax": 18.19, "skipCalculate": 1, "defaultTax": 0, "currentTax": 0, "idSuffix": "_clone", "oldPlusDisposition": 0, "plusDisposition": 0, "plusDispositionTax": 0, "oldMinusDisposition": 0, "minusDisposition": 0, "tierPrices": [], "tierPricesInclTax": [] }); //有特价 var optionsPrice = new Product.OptionsPrice({ "productId": "2009", "priceFormat": { "pattern": "\uffe5\u00a0%s", "precision": 2, "requiredPrecision": 2, "decimalSymbol": ".", "groupSymbol": ",", "groupLength": 3, "integerRequired": 1 }, "includeTax": "false", "showIncludeTax": false, "showBothPrices": false, "productPrice": 24.7, "productOldPrice": 29.7, "priceInclTax": 24.7, "priceExclTax": 24.7, "skipCalculate": 1, "defaultTax": 0, "currentTax": 0, "idSuffix": "_clone", "oldPlusDisposition": 0, "plusDisposition": 0, "plusDispositionTax": 0, "oldMinusDisposition": 0, "minusDisposition": 0, "tierPrices": [], "tierPricesInclTax": [] });
通过 Product.OptionsPrice 可追踪到 调用 JS 函数的PHTM
/** * Created by PhpStorm. * User: Administrator * Date: 2016/4/28 0028 * app\design\frontend\base\default\template\catalog\product\view\options.phtml */ if(element.type == 'select-multiple' && ('options' in element)) { $A(element.options).each(function(selectOption) { if (('selected' in selectOption) && typeof(configOptions[selectOption.value]) != 'undefined') { if (selectOption.selected) { curConfig = configOptions[selectOption.value]; } else { curConfig = {price: 0}; } optionsPrice.addCustomPrices(optionId + '-' + selectOption.value, curConfig); optionsPrice.reload(); } }); } else { optionsPrice.addCustomPrices(element.id || optionId, curConfig); optionsPrice.reload(); }
通过 搜索 addCustomPrices optionsPrice.reload() 追踪到调用的JS 库
//有特价 自动修改 js 代码 /** * Created by PhpStorm. * User: Administrator * Date: 2016/4/28 0028 * js\varien\product.js */ if (price > 0 || this.displayZeroPrice) { formattedPrice = this.formatPrice(price); } else { formattedPrice = ''; } if ($(pair.value).select('.price')[0]) { $(pair.value).select('.price')[0].innerHTML = formattedPrice; if ($(pair.value+this.duplicateIdSuffix) && $(pair.value+this.duplicateIdSuffix).select('.price')[0]) { $(pair.value+this.duplicateIdSuffix).select('.price')[0].innerHTML = formattedPrice; } } else { $(pair.value).innerHTML = formattedPrice+"W";//测试 单位万 后缀 if ($(pair.value+this.duplicateIdSuffix)) { $(pair.value+this.duplicateIdSuffix).innerHTML = formattedPrice+"W"; //测试 单位万 后缀 } }
转载请注明:(●--●) Hello.My Weicot » Magento 1x 全局价格规则控制 以及快速定位 文件及JS