한 페이지 체크 아웃에 단계 추가


18

한 페이지에 더 쉽게 단계를 추가 할 수있는 확장 기능, 오픈 소스 Magento 모듈 또는 자습서가 있습니까? 나는 이것을 위해 몇 번 핵심 코드를 찔 렀고 많은 하드 코딩 된 단계 정보가있는 것처럼 보입니다.


5
불행히도 Checkout 코드는 매우 유연하지 않은 것 같습니다. 많은 정보가 템플릿에서 자바 스크립트 아코디언 파일로 하드 코딩됩니다.
Allan MacGregor

1
이 튜토리얼을 따라 한 페이지 체크 아웃에서 새로운 단계를 추가 할 수있었습니다. 어쨌든이 단계를 수행하려면 많은 코어 파일을 재정의해야합니다. 이것이 도움이
되었기

답변:


6

이 질문에 대한 짧은 대답은 "아니오"였습니다. 높은 수준에서 새로운 결제 단계를 추가하면

  1. 한 단계 결제 페이지에 새 블록 추가

  2. 해당 블록을 단계로 등록

  3. 모든 상호 작용을 처리 한 프로토 타입 객체로 해당 블록을 연결

  4. 블록을 단계로 삽입하기 위해 몇 가지 핵심 Magento 메소드 재 작성

  5. 진행 상황을 작동시키는 일부 아약스 속임수.

이를 다루는 것은 단일 스택 오버플로 질문의 범위를 벗어납니다. 다른 질문에 연결된 자습서 에는 필요한 내용이 많이 있으며이 모든 것을 쉽게 하기 위해 새로운 상용 확장 프로그램을 만들었습니다 .


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();
       }
     }

2 단계 : 결제 프로세스에서 원하는 단계를 추가

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> 컨트롤러> 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> 모델> 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에서 사용자 지정 양식 추가는 전자 상거래 웹 사이트의 Checkout 프로세스에서 추가 단계를 추가하는 완벽한 솔루션입니다. 관리자가 사용자 정의 테이블의 데이터를 CSV 형식으로 내보낼 수 있습니다.

이 무료 확장 프로그램을 얻으려면 링크를 방문하십시오 http://www.magentocommerce.com/magento-connect/custom-form-in-checkout.html


0

예, 여기에 대한 좋은 튜토리얼이 있습니다 " http://excellencemagentoblog.com/magento-onestep-checkout-add-step "


4
해당 URL의 끝에있는 것을 조금 설명해야합니다. 단일 링크 답변이 최선의 답변이 아닙니다.
Marius

URL 자체에는 magento-onestep-checkout-add-step이 있으며 질문이 요구하는 것입니다.
Dhanpat Saran

5
나는 링크의 설명이 훌륭합니다, 당신과 함께 동의하지만, 대답은 SO 웹 사이트에 있어야 방법에 대해 살펴 걸릴 : meta.stackexchange.com/a/8259/224252 이 : magento.stackexchange.com/help/how를 -답변
마리우스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.