ワンページチェックアウトへのステップの追加


18

1ページのチェックアウトに簡単にステップを追加できる拡張機能、オープンソースのMagentoモジュール、またはチュートリアルはありますか?私はこのためのコアコードを数回突いてみましたが、ハードコードされたステップ情報がたくさんあるようです。


5
残念ながら、Checkoutコードはそれほど柔軟ではないようです。多くの情報はテンプレートからjavascriptアコーディオンファイルにハードコードされています。
アランマクレガー14

1
このチュートリアルに従って、ワンページチェックアウトに新しい手順を追加できました。とにかく、このステップを実現するには、多くのコアファイルをオーバーライドする必要があります。希望この意志便利excellencemagentoblog.com/magento-onestep-checkout-add-step
Sukeshini

回答:


6

この質問に対する短い答えは「いいえ」でした。高レベルから、新しいチェックアウト手順を追加することは、

  1. ワンステップチェックアウトページに新しいブロックを追加する

  2. そのブロックをステップとして登録する

  3. そのブロックを、すべての相互作用を処理するプロトタイプオブジェクトに接続します

  4. ブロックをステップとして挿入するためのいくつかのコアMagentoメソッドの書き換え

  5. 進行状況を機能させるためのいくつかのAjaxトリック。

合計でこれをカバーすることは、単一のStack Overflowの質問の範囲を超えています。別の質問にリンクされているチュートリアルには、必要なものがたくさんあります。また、これらすべてを簡単するために、新しい商用拡張機能も作成しました。


4

デフォルトでは、magentoはいくつかのチェックアウト手順を提供します。ただし、将来の参照のために、顧客から追加情報を追加する必要がある場合があります。一般的に要求されるカスタマイズは、デフォルトのチェックアウトプロセスでカスタムフォームを追加することです。これは、コアファイルに触れることはお勧めできません。これは、モジュールをオーバーライドすることで実行できます。この例では、ComapnynameはIpragmatechで、モジュール名はCheckoutstepです。

ステップ1:チェックアウトプロセスにカスタムステップを追加する

Ipragmatech> Checkoutstep> Block> Onepage> Checkoutstep.phpファイルを開き、次のコードを記述します

    class Ipragmatech_Checkoutstep_Block_Onepage_Checkoutstep extends Mage_Checkout_Block_Onepage_Abstract
    {
       protected function _construct()
       {     
          $this->getCheckout()->setStepData('checkoutstep', array(
          'label'     => Mage::helper('checkout')->__('Invitation to participation'),
          'is_show'   => true
        ));
        parent::_construct();
       }
     }

Step2:チェックアウトプロセスで必要な場所にステップを追加します

Ipragmatech> Checkoutstep> Block> Onepage> Checkoutstep.phpファイルを開き、次のコードを記述します

    class Ipragmatech_Checkoutstep_Block_Onepage extends Mage_Checkout_Block_Onepage
    {
      public function getSteps()
      {
             $steps = array();

             if (!$this->isCustomerLoggedIn()) {
                $steps['login'] = $this->getCheckout()->getStepData('login');
             }

            $stepCodes = array('billing', 'shipping', 'shipping_method', 'payment', 'checkoutstep', 'review');
         foreach ($stepCodes as $step) {
             $steps[$step] = $this->getCheckout()->getStepData($step);
          }

    return $steps;
   }
}

ステップ3:送信されたカスタムフォームの値を取得し、カスタムフォームの値を設定します

ipragmatech> Checkoutstep> controllers> OnepageController.phpを開き、次の機能を記述します

    public function saveCheckoutstepAction()
    {
      $this->_expireAjax();
      if ($this->getRequest()->isPost()) {

     //Grab the submited value 
     $_entrant_name = $this->getRequest()->getPost('entrant_name',"");
     $_entrant_phone = $this->getRequest()->getPost('entrant_phone',"");
     $_entrant_email = $this->getRequest()->getPost('entrant_email',"");
     $_permanent_address = $this->getRequest() ->getPost('permanent_address',"");
     $_address = $this->getRequest()->getPost('local_address',"");

     Mage::getSingleton('core/session') ->setIpragmatechCheckoutstep(serialize(array(
    'entrant_name' =>$_entrant_name,
    'entrant_phone' =>$_entrant_phone,
    'entrant_email' =>$_entrant_email,
    'permanent_address' =>$_permanent_address,
    'address' =>$_address
     )));

    $result = array();
    $redirectUrl = $this->getOnePage()->getQuote()->getPayment() ->getCheckoutRedirectUrl();
        if (!$redirectUrl) {
            $this->loadLayout('checkout_onepage_review');
            $result['goto_section'] = 'review';
            $result['update_section'] = array(
                'name' => 'review',
                'html' => $this->_getReviewHtml()
            );

        }

        if ($redirectUrl) {
            $result['redirect'] = $redirectUrl;
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }
}

ステップ4:カスタムフォーム情報を保存する

checkout_onepage_controller_success_actionイベントフックが呼び出されたとき。Ipragmatech> Checkoutstep> Model> Observer.phpを開き、次のように記述します

    class Ipragmatech_Checkoutstep_Model_Observer {
      const ORDER_ATTRIBUTE_FHC_ID = 'checkoutstep';
      public function hookToOrderSaveEvent() {
      if (Mage::helper('checkoutstep')->isEnabled()) {
         $order = new Mage_Sales_Model_Order ();
         $incrementId = Mage::getSingleton ( 'checkout/session' )->getLastRealOrderId ();
         $order->loadByIncrementId ( $incrementId );

       // Fetch the data 
       $_checkoutstep_data = null;
       $_checkoutstep_data = Mage::getSingleton ( 'core/session' )->getIpragmatechCheckoutstep ();
       $model = Mage::getModel ( 'checkoutstep/customerdata' )->setData ( unserialize ( $_checkoutstep_data ) );
       $model->setData ( "order_id",$order["entity_id"] );
       try {
           $insertId = $model->save ()->getId ();
             Mage::log ( "Data successfully inserted. Insert ID: " . $insertId, null, 'mylog.log');
        } catch ( Exception $e ) {
            Mage::log ( "EXCEPTION " . $e->getMessage (), null, 'mylog.log' );
          }
        }
    }

}

Magento – Checkout Extensionでのカスタムフォームの追加は、eコマースWebサイトのCheckoutプロセスに追加のステップを追加する完全なソリューションです。管理者は、カスタムテーブルからCSV形式でデータをエクスポートできます。

この無料の拡張機能を入手するには、リンクにアクセスしてくださいhttp://www.magentocommerce.com/magento-connect/custom-form-in-checkout.html


0

はい、これについての良いチュートリアルがここにあります " http://excellencemagentoblog.com/magento-onestep-checkout-add-step "


4
そのURLの最後にあるものを少し説明する必要があります。単一リンクの回答は最良の回答ではありません。
マリウス

URL自体はmagento-onestep-checkout-add-stepであり、これが質問の対象です。
ダンパットサラン14年

5
私はあなたに同意します、リンクの説明は素晴らしいですが、SOウェブサイトで答えがどうあるべきか見てください:meta.stackexchange.com/a/8259/224252そしてこれ:magento.stackexchange.com/help/how回答
マリウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.