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

标签 php magento cart shipping

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

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/

相关文章:

php - FPDF错误: Unsupported image type: image/jpeg

python - 导入命名空间后出现 TypeNotFoundError

php - Magento 管理菜单 block 未显示在配置选项卡中?

Magento 愿望 list - 删除项目

php - 为 WooCommerce 购物车中的某些产品添加费用

php - 列出类别以及每个项目的数量

php - PHP“strip_tags”接受脚本以外的所有内容

php - 在readynas duo上运行phpmyadmin时出现"fatal error"

javascript - jquery 令人困惑的代码

php - Woocommerce - 清除主页上的购物车(登录时不起作用)