Agregar un paso al pago de una página

18

¿Hay extensiones, módulos de código abierto de Magento o tutoriales que faciliten la adición de un paso a la comprobación de una página? He tocado el código central para esto varias veces y parece que hay mucha información de pasos codificada.

Alan Storm
fuente
55
Desafortunadamente, el código de Checkout no parece ser muy flexible, gran parte de la información está codificada desde las plantillas a los archivos de acordeón de JavaScript.
Allan MacGregor
1
Seguí este tutorial y pude agregar un nuevo paso en el pago de una página. De todos modos, se deben anular muchos archivos principales para lograr este paso. Espero que esto sea útil excelenciamagentoblog.com/magento-onestep-checkout-add-step
Sukeshini

Respuestas:

6

La respuesta corta a esta pregunta terminó siendo "No". Desde un nivel alto, agregar un nuevo paso de pago significaba

  1. Agregar un nuevo bloque a la página de pago de un paso

  2. Tener ese bloque registrado como un paso

  3. Conecte ese bloque con un prototipo de objeto que maneja todas las interacciones

  4. Reescribiendo varios métodos principales de Magento para insertar el bloque como un paso

  5. Algunos trucos de ajax para que el progreso funcione.

Cubrir esto en total está más allá del alcance de una sola pregunta de desbordamiento de pila. El tutorial vinculado en otra pregunta tiene mucho de lo que necesitará, y también creé una nueva extensión comercial para facilitar todo esto .

Alan Storm
fuente
4

Por defecto, magento ofrece algunos pasos de pago. Pero en algún momento debe agregar información adicional del cliente para referencia futura. Una personalización solicitada común es agregar el formulario personalizado en el proceso de pago predeterminado. Esta no es una buena práctica para tocar archivos principales. Puede hacerlo mediante la anulación de módulos. En este ejemplo, Comapnyname es Ipragmatech y el nombre del módulo es Checkoutstep .

Paso 1: Agregar paso personalizado en el proceso de pago

Abra el archivo Ipragmatech> Checkoutstep> Bloque> Onepage> Checkoutstep.php y escriba el siguiente 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();
       }
     }

Paso 2: agregue los pasos que desee y en el proceso de pago

Abra el archivo Ipragmatech> Checkoutstep> Bloque> Onepage> Checkoutstep.php y escriba el siguiente 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;
   }
}

Paso 3: tome el valor enviado del formulario personalizado y establezca los valores del formulario personalizado

Abra el ipragmatech> Checkoutstep> controladores> OnepageController.php y escriba la siguiente función

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

Paso 4: guarde la información del formulario personalizado

Cuando se llama al evento checkout_onepage_controller_success_action hook. Abra Ipragmatech> Checkoutstep> Modelo> Observer.php y escriba lo siguiente

    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: Agregar formulario personalizado en la extensión de pago es una solución completa para agregar un paso adicional en el proceso de pago de su sitio web de comercio electrónico. Permite al administrador exportar datos de una tabla personalizada en formato CSV.

Visite el enlace para obtener esta extensión gratuita http://www.magentocommerce.com/magento-connect/custom-form-in-checkout.html

Ajay
fuente
0

sí, hay un buen tutorial sobre esto aquí " http://excellencemagentoblog.com/magento-onestep-checkout-add-step "

Dhanpat Saran
fuente
44
Debe explicar un poco lo que se encuentra al final de esa url. Las respuestas de enlace único no son las mejores respuestas.
Marius
la url misma dice magento-onestep-checkout-add-step y esto es lo que la pregunta está pidiendo.
Dhanpat Saran
55
Estoy de acuerdo con usted, la explicación en el enlace es maravillosa, pero eche un vistazo a cómo deberían ser las respuestas en los sitios web de SO: meta.stackexchange.com/a/8259/224252 y esto: magento.stackexchange.com/help/how
Marius