我使用 Alan Storms 教程开发了一个自定义模块来满足我的项目要求,用于在 magento 中创建模块。
我需要根据实时源在前端动态更改价格属性。Feed 每秒都会更新一次,因此每次页面刷新时,都必须为网站上的每种产品显示一个新价格。
为此,我已经覆盖了产品模块和价格模块。问题在于分级定价。当分级定价到位时,我需要根据实时价格计算分级价格。
为此,我也设法使用 price_type 类覆盖进行了更改。
现在,每当将一个项目添加到购物车时,层级定价都不起作用,我写了 event_trigger 即一个观察者,它更新事件“checkout_cart_save_before”的层级定价,这是我的代码
class My_Custom_Model_Observer extends Varien_Event_Observer
{
public function __construct()
{
}
public function updateCartBasedOnLiveFeed($observer)
{
foreach ($observer->getCart()->getQuote()->getAllVisibleItems() as $item /* @var $item Mage_Sales_Model_Quote_Item */)
{
$tierPrices = array();
$tierPrices = $item->getProduct()->getTierPrice();
$itemPrice = $item->getProduct()->getPrice();
$i=0;
foreach($tierPrices as $key => $tierPrice)
{
if(!is_numeric($key))
{
$updatedTierPrice = $itemPrice - ($itemPrice * ($tierPrice['price']/100));
$tierPrices[$key]['price'] = $updatedTierPrice;
$tierPrices[$key]['website_price'] = $updatedTierPrice;
}
else
{
if($tierPrice['price'] > 0)
{
$updatedTierPrice = $itemPrice - ($itemPrice * ($tierPrice['price']/100));
$tierPrice['price'] = $updatedTierPrice;
$tierPrice['website_price'] = $updatedTierPrice;
$tierPrices[$i] = $tierPrice;
$i++;
}
}
}
$item->getProduct()->setData('tier_price',$tierPrices);
}
}
}
上面的代码在购物车页面中效果很好。但是当谈到结帐页面时。它适用于单个项目,当分级定价发挥作用时,它会应用购物车价格。
请帮我解决一下这个。
我还尝试使用其他事件以及上述事件。
事件:sales_quote_save_before
public function updateQuoteLive($observer)
{
$tierPrices = array();
$quote_item = $observer->getEvent()->getQuote;
$itemPrice = $quote_item->getProduct()->getPrice();
$tierPrices = $quote_item->getProduct()->getTierPrice();
$tierPricesSize = sizeof($tierPrices);
for($i=0;$i<$tierPricesSize;$i++)
{
$updatedTierPrice = $itemPrice - ($itemPrice * ($tierPrices[$i]['price']/100));
$tierPrices[$i]['price'] = $updatedTierPrice;
$tierPrices[$i]['website_price'] = $updatedTierPrice;
}
$quote_item->getProduct()->setData('tier_price',$tierPrices);
}
当我尝试打印 Quote.php 中可用的 getQuote() 函数时,我发现那里的层价格不是我使用第一个事件更新的价格。所以我想我需要在保存报价之前更新价格。请任何人帮助我并显示正确的方向。
请帮我解决这个问题,我错过了一些重要的步骤。任何帮助是极大的赞赏。
提前致谢。