在结帐页面中将文字添加到免费送货区块

时间:2013-04-12 10:00:29

标签: magento shipping

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

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

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

此致 Ravijot Kaur

1 个答案:

答案 0 :(得分: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中看到调用所有运营商的示例,以及从包含$carrier->collectRates($request); - 函数调用的Mage_Shipping_Model_Shipping :: collectCarrierRates调用的函数,您必须根据您的请求进行调用。

collectRates函数将返回一个结果类(Mage_Shipping_Model_Tracking_Result)(使用var_dump($ response-> getData());或者Mage :: log($ response-> getData());来查看结构)并从中在那个级别,您将获得承运人为将产品交付到送货地址而收取的价格。

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

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

    将文本添加到每个模板文件的替代方法是在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中的地址。