gpt4 book ai didi

php - 在 Magento 的购物车和/或结帐处访问运费

转载 作者:可可西里 更新时间:2023-11-01 13:57:48 25 4
gpt4 key购买 nike

请注意,此问题是关于运费,而不是价格。有一个重要的区别,即运输方式对店主产生的 $$ 费用,而不是客户支付的 $$ 费用。

shipping_tablerate数据库表包括一个 cost填充在 Mage_Shipping_Model_Carrier_Tablerate 中的字段collectRates 期间的对象方法。但是,该字段在堆栈中的其他任何地方都不可访问,例如从报价的地址。

我需要在购物车页面上访问该值,但除了实例化一个 Mage_Shipping_Model_Rate_Request 之外,我找不到其他方法来实现它。传递给 collectRates() 的对象.鉴于数据已经从表中加载并且应该可以访问,这似乎不必要地低效。

我已经尝试观察 <shipping_carrier_tablerate_load/>事件,但似乎 _load不会为该模型抛出事件。

我也试过从报价中获取汇率:

$quote = Mage::getSingleton('checkout/cart')->getQuote();
$address = $quote->getShippingAddress();
$rate = $address->getShippingRateByCode($code ='tablerate_bestway');

我可以看到计算出的 price , 然而 cost该模型中不存在。

在这个阶段,我的想法已经用完了。非常感谢收到任何建议!

谢谢,乔纳森

最佳答案

首先,在您发现某处存在真正的瓶颈之前,请不要过分担心性能。相信众多的缓存系统。更讽刺的是,Magento 已经有点像 SQL 野兽了,所以如果你有一个调整好的商店,一些额外的查询不会有什么坏处。

其次,数据库命中甚至可能不是问题。 shipping/rate_request 模型似乎没有数据库支持。如果你看一下它在核心代码中使用的两次

Mage_Shipping_Model_Shipping::collectRatesByAddress
Mage_Sales_Model_Quote_Address::requestShippingRates

您可以看到 shipping/rate_request 模型正在被实例化,然后从已经加载的字段中填充。此外,Mage_Shipping_Model_Carrier_Tablerate::collectRates 中使用的所有模型都不会从数据库加载任何内容,它们只是进行计算。

令人钦佩的是,您希望在第一次运行时构建尽可能高性能的东西,但现代 OO 系统中有太多复杂的交互,以至于无法神奇地知道做某事的最佳方式。做你需要做的事情来获取你需要的信息,并在维护版本期间处理性能调整(如果需要)(或者如果你没有幸运地拥有维护版本,当你的组织中有权力的人提示某处的速度)

第三,当系统不提供对你需要的东西的访问时,这就是类覆盖系统的作用。有点像

class Package_Module_Model_Carriertablerate extends
Mage_Shipping_Model_Carrier_Tablerate
{
public function getRate(Mage_Shipping_Model_Rate_Request $request)
{
$rate = parent::getRate($request);
Mage::register('package_module_carriertablerates', $rate);
return $rate;
}

}

...
//later, retrieve the rate
$rates = Mage::registry('package_module_carriertablerates');

您基本上是在调用与以前相同的代码,但将结果存放在某个地方以供以后访问。与覆盖一样安全。

关于php - 在 Magento 的购物车和/或结帐处访问运费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3848705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com