【问题标题】:Add text into free shipping block in checkout page在结帐页面的免费送货块中添加文本
【发布时间】:2013-04-12 10:00:29
【问题描述】:

如何在 magento 中自定义结帐页面上的免费送货文本。

我想在结帐页面添加一些文本来代替运费。

默认情况下,运费为:-“免费 0.00 美元”,我想将其更改为“免费 6.95 美元 - 6.95 美元 = 0.00 美元”。

问候, 拉维约特考尔

【问题讨论】:

  • 如果有任何解决办法请告诉我。

标签: magento shipping


【解决方案1】:

想到两个解决方案:

1) 您可以为所有产品添加一个属性,并硬编码您预计每种产品的运输成本,然后将这些数字相加。在这种情况下,您只需找到要更改免费送货文本的所有模板,获取当前在购物车中的所有商品(有关如何获取报价商品的信息,请参阅this 答案),您可以从中获取使用 getProduct() 获取产品数据,加载您的属性,汇总它们,将价格格式化为您商店的区域设置并打印出来。

例如:这样的位置之一是app/design/frontend/base/default/template/checkout/onepage/shipping_method/available.phtml,您必须在其中放置一个 if 语句,以便您只更改免费送货。在那里你可以看到对 $_rate->getCode() 的调用。如果该函数的输出与 freeshipping_freeshipping 匹配,那么您必须将文本附加到 html。

2) 第二个更复杂的解决方案是您选择另一种运输方式并从中获取金额(例如,您使用 ups 运输方式来查看如果免费送货会花费多少不会被使用)。为此,您必须创建一个帮助程序类并实现一个将运输地址(Mage_Sales_Model_Quote_Address 类)转换为请求(Mage_Shipping_Model_Rate_Request 类)的函数

public function prepareRequest( Mage_Sales_Model_Quote_Address $address )
{
  $request = Mage::getModel( 'shipping/rate_request' )
      ->setAllItems( $address->getAllItems() )
      ->setDestCountryId( $address->getCountryId() )
      ->setDestRegionId( $address->getRegionId() )
      ->setDestPostcode( $address->getPostcode() )
      ->setPackageValue( $address->getBaseSubtotal() )
      ->setPackageValueWithDiscount( $address->getBaseSubtotalWithDiscount() )
      ->setStoreId( Mage::app()->getStore()->getId() )
      ->setWebsiteId( Mage::app()->getStore()->getWebsiteId() )
      ->setBaseCurrency( Mage::app()->getStore()->getBaseCurrency() )
      ->setPackageCurrency( Mage::app()->getStore()->getCurrentCurrency() )
      ->setPackageQty( $address->getItemQty() )
      ->setPackageWeight( $address->getWeight() );

  return $request;
}

你可以从qoute获取地址:

Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress();

根据该请求,您可以在您选择的运营商上调用 collectRates 函数(例如 Mage_Usa_Model_Shipping_Carrier_Ups::collectRates)。您可以在 Mage_Shipping_Model_Shipping::collectRates 中看到调用所有运营商的示例,以及从 Mage_Shipping_Model_Shipping::collectCarrierRates 调用的函数,其中包含 $carrier->collectRates($request); - 您必须根据您的请求进行函数调用。

collectRates 函数将返回一个结果类 (Mage_Shipping_Model_Tracking_Result) (使用 var_dump( $response->getData() ); 或 Mage::log( $response->getData() ); 查看结构)并从该类您将获得承运人将产品运送到收货地址所收取的价格。

使用该数字,您就可以像使用解决方案 1) 一样执行相同的操作(参见第一个解决方案底部的示例部分):

  1. 根据您商店的区域设置价格格式
  2. 找到您要进行更改的所有 phtml 文件
  3. 检查送货方式是否为 freeshipping_freeshipping
  4. 如果是免费送货,请添加您的文字

编辑:

将文本添加到每个模板文件的替代方法是使用 Mage_Shipping_Model_Carrier_Freeshipping 类的重写并将文本添加到 $method->setMethodTitle($this->getConfigData('name')); setter。

编辑 2:

或者更好的是根据免费送货方式、this 文章和上述解决方案编写自己的送货方式。这样您就不必使用重写或更改模板文件。

编辑 3:

我忘了提到在上面的 prepareRequest 函数中你还必须设置 package_qty 和 package_weight(现在已经添加了它们)。这两个值被计算并添加到Mage_Sales_Model_Quote_Address_Total_Shipping::collect中的地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多