0

顧客のために新しい配送方法を書いています。送料計算がうまくいき、「配送方法」ステップに表示されますが、次のことを行います。

a) ユーザーが請求先住所への発送を選択した場合でも、ユーザーが最初の (請求) タブの [続行] ボタンによってトリガーされたbilling.save() を押した後、[配送情報] タブを強制的に開きます。と

b) 配送情報タブに「受領済み配送」、「輸送保証」、および「テールトラック集荷」のオプションを追加します。これは、配送見積もりを再計算するときに考慮されます。

パート b) では、shipping.phtml テンプレートを /layout の xml 構成ファイルでオーバーライドし、collectRates() メソッドで追加された投稿フィールドを探すと仮定します。

前もって感謝します!

4

1 に答える 1

2

パート a) に関しては、コントローラーを上書きする必要がありますMage_Checkout_OnepageController。これを行うには、独自のモジュールを作成し (これを行う方法を知っていると仮定します)、 app/code/local/YourModule/etc/config.xml に次の部分を含める必要があります。

<config>
...
    <frontend>
        <routers>
            <checkout>
                <args>
                    <modules>
                        <YourModule_Checkout before="Mage_Checkout">YourModule_Checkout</YourModule_Checkout>
                    </modules>
                </args>
            </checkout>
        </routers>
    </frontend>
</config>

次に、 app/code/local/YourModule/controllers/OnepageController.php で動作を上書きしたいので、[請求を保存] ボタンをクリックすると、常に配送ページが表示されます。

include_once("Mage/Checkout/controllers/OnepageController.php");

class YourModule_Checkout_OnepageController extends Mage_Checkout_OnepageController
{
  public function saveBillingAction()
  {
    if ($this->_expireAjax()) {
        return;
    }
    if ($this->getRequest()->isPost()) {
        $data = $this->getRequest()->getPost('billing', array());
        $customerAddressId = $this->getRequest()->getPost('billing_address_id', false);

        if (isset($data['email'])) {
            $data['email'] = trim($data['email']);
        }
        $result = $this->getOnepage()->saveBilling($data, $customerAddressId);

        if (!isset($result['error'])) {
            /* check quote for virtual */
            if ($this->getOnepage()->getQuote()->isVirtual()) {
                $result['goto_section'] = 'payment';
                $result['update_section'] = array(
                    'name' => 'payment-method',
                    'html' => $this->_getPaymentMethodsHtml()
                );
            } else { // Removed elseif block here which usually skips over shipping if you selected to use the same address as in billing
                $result['goto_section'] = 'shipping';
            }
        }

        $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
    }
  }
}

次に、パート b) には 2 つのオプションがあります。ご指摘のとおり、XML レイアウト システムを使用して shipping.phtml に別のテンプレートを設定します。

<checkout_onepage_index>
   <reference name="checkout.onepage.shipping">
      <action method="setTemplate">
         <new>my_shipping.phtml</new>
      </action>
   </reference>
</checkout_onepage_index>

または、さらに簡単な方法として、カスタム デザイン フォルダーを使用して shipping.phtml テンプレートを上書きします。カスタム データを評価するために、モデルはメソッドMage_Checkout_Model_Type_Onepage内のデータを処理します。そのsaveShipping()ため、カスタム ロジックを実装するには、これが良いポイントになると思います。

于 2013-01-08T15:23:21.380 に答える