Jon*_*Day 5 php shipping magento cart
请注意,这个问题是关于运费,而不是价格.有一个重要的区别,即商店所有者对运输方法的收费是多少,而不是客户支付的$$费用.
该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');
Run Code Online (Sandbox Code Playgroud)
我可以看到计算结果price,但是cost在该模型中不存在.
在这个阶段,我的想法已经不多了.任何建议都感激不尽!
谢谢,乔纳森
首先,在你看到某个地方存在实际瓶颈之前,不要过分担心性能问题.相信众多的缓存系统.更为愤世嫉俗的是,Magento已经有点像SQL野兽了,所以如果你有一个好的商店,一些额外的查询也不会受到影响.
其次,数据库命中甚至可能不是问题.该shipping/rate_request模型似乎并没有被数据库进行备份.如果你看两次在核心代码中使用它
Mage_Shipping_Model_Shipping::collectRatesByAddress
Mage_Sales_Model_Quote_Address::requestShippingRates
Run Code Online (Sandbox Code Playgroud)
您可以看到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');
Run Code Online (Sandbox Code Playgroud)
你基本上调用了和以前一样的代码,但是将结果存放在某个地方以便以后访问.关于覆盖可以获得的安全性.
| 归档时间: |
|
| 查看次数: |
11210 次 |
| 最近记录: |