Magento のチェックアウト ページで無料ショッピング テキストをカスタマイズする方法。
チェックアウトページで配送料の代わりにテキストを追加したいと思います。
デフォルトの配送料は「無料 $0.00」ですが、「無料 $6.95 - $6.95 = $0.00」に変更したいと考えています。
よろしく、 Ravijot Kaur
2 つの解決策が思い浮かびます。
1)すべての製品に属性を追加し、各製品の予想送料をハードコードして、それらの数値を合計することができます。この場合、送料無料のテキストを変更したいすべてのテンプレートを見つけて、現在カートに入っているすべてのアイテムを取得し (見積もりアイテムを取得する方法については、この回答を参照してください)、それらから製品を取得できます。 getProduct() を使用してデータを取得し、属性をロードして合計し、価格をストアのロケールにフォーマットして出力します。
たとえば、そのような場所の 1 つはapp/design/frontend/base/default/template/checkout/onepage/shipping_method/available.phtml
、そこに if ステートメントを配置して、送料無料にのみ変更を加える必要がある場合です。$_rate->getCode() への呼び出しが表示されます。その関数の出力が freeshipping_freeshipping と一致する場合は、テキストを html に添付する必要があります。
2)もう 1 つのもう少し複雑な解決策は、別の配送方法を選択して、そこから金額を取得することです (たとえば、送料無料を使用しない場合の送料を確認するために 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)。$carrier->collectRates($request);
Mage_Shipping_Model_Shipping::collectRates のすべての配送業者への呼び出しの例と、リクエストで作成する必要がある関数呼び出しを含む Mage_Shipping_Model_Shipping::collectCarrierRates から呼び出される関数を確認できます。
collectRates 関数は結果クラス (Mage_Shipping_Model_Tracking_Result) を返します (var_dump( $response->getData() ); または Mage::log( $response->getData() ); を使用して構造を確認します)、そのクラスから取得します運送業者が配送先住所に商品を配送するために請求する価格。
その番号を使用して、ソリューション1を使用する場合と同じことを行います(最初のソリューションの下部にある例の部分を参照)。
編集:
各テンプレート ファイルにテキストを追加する代わりに、Mage_Shipping_Model_Carrier_Freeshipping クラスを書き換えて、$method->setMethodTitle($this->getConfigData('name'));
セッターにテキストを追加することもできます。
編集2:
または、無料の配送方法、この記事、および上記の解決策に基づいて、独自の配送方法を作成することをお勧めします. そうすれば、テンプレート ファイルを書き換えたり変更したりする必要がなくなります。
編集3:
上記の prepareRequest 関数では、package_qty と package_weight も設定する必要があることを忘れていました (これらは現在追加されています)。この 2 つの値が計算され、 のアドレスに追加されますMage_Sales_Model_Quote_Address_Total_Shipping::collect
。