Adicionando uma etapa ao checkout de uma página

18

Existem extensões, módulos Magento de código aberto ou tutoriais que facilitam a adição de uma etapa ao checkout de uma página? Analisei o código principal algumas vezes e parece que há muitas informações sobre etapas codificadas.

Alan Storm
fonte
5
Infelizmente, o código do Google Checkout não parece ser muito flexível; muitas informações são codificadas permanentemente de modelos para os arquivos acordeão javascript.
Allan MacGregor
11
Segui este tutorial e consegui adicionar uma nova etapa no checkout de uma página. De qualquer forma, muitos arquivos principais precisam ser substituídos para alcançar esta etapa. Espero que este irá útil excellencemagentoblog.com/magento-onestep-checkout-add-step
Sukeshini

Respostas:

6

A resposta curta para essa pergunta acabou sendo "Não". De alto nível, adicionar uma nova etapa de checkout significava

  1. Adicionando um novo bloco à página de checkout de uma etapa

  2. Ter esse bloco se registrar como uma etapa

  3. Conecte esse bloco a um objeto de protótipo que manipulou todas as interações

  4. Reescrevendo vários métodos principais do Magento para inserir o bloco como uma etapa

  5. Alguns truques do Ajax para fazer o progresso funcionar.

Cobrir isso no total está além do escopo de uma única pergunta de estouro de pilha. O tutorial vinculado em outra pergunta tem muito do que você precisará, e também criei uma nova extensão comercial para facilitar tudo isso .

Alan Storm
fonte
4

Por padrão, o magento fornece algumas etapas de pagamento. Mas em algum momento você precisará adicionar informações extras do cliente para referência futura. Uma personalização solicitada comum é adicionar o formulário personalizado no processo de checkout padrão. Não é uma boa prática tocar em arquivos principais. Você pode fazer isso através da substituição de módulos. Neste exemplo, Comapnyname é Ipragmatech e o nome do módulo é Checkoutstep .

Etapa 1: adicionar etapa personalizada no processo de checkout

Abra o arquivo Ipragmatech> Checkoutstep> Block> Onepage> Checkoutstep.php e escreva o seguinte código

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

Etapa 2: adicione as etapas que e onde você deseja no processo de checkout

Abra o arquivo Ipragmatech> Checkoutstep> Block> Onepage> Checkoutstep.php e escreva o seguinte código

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

Etapa 3: pegue o valor enviado do formulário personalizado e defina os valores do formulário personalizado

Abra o ipragmatech> Checkoutstep> controllers> OnepageController.php e escreva a seguinte função

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

Etapa 4: salvar informações de formulário personalizado

Quando o gancho de evento checkout_onepage_controller_success_action é chamado. Abra Ipragmatech> Checkoutstep> Model> Observer.php e escreva o seguinte

    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 - Adicionar formulário personalizado na extensão do Checkout é uma solução completa para adicionar uma etapa extra no processo de Checkout ao seu site de comércio eletrônico. Ele permite que o administrador exporte dados da tabela personalizada no formato CSV.

Visite o link para obter esta extensão gratuita http://www.magentocommerce.com/magento-connect/custom-form-in-checkout.html

Ajay
fonte
0

sim, há um bom tutorial sobre isso aqui " http://excellencemagentoblog.com/magento-onestep-checkout-add-step "

Dhanpat Saran
fonte
4
Você deve explicar um pouco o que é encontrado no final desse URL. As respostas de link único não são as melhores respostas.
Marius
o próprio URL diz magento-onestep-checkout-add-step e é isso que a pergunta está pedindo.
Dhanpat Saran
5
Concordo com você, a explicação no link é maravilhosa, mas veja como as respostas devem estar nos sites SO: meta.stackexchange.com/a/8259/224252 e esta: magento.stackexchange.com/help/how -to-answer
Marius