Hinzufügen eines Schritts zur One Page Checkout

18

Gibt es Erweiterungen, Open-Source-Magento-Module oder Lernprogramme, die das Hinzufügen eines Schritts zum Auschecken auf einer Seite erleichtern? Ich habe ein paar Mal im Kerncode gestochert und es scheint, als gäbe es viele hartcodierte Schrittinformationen.

Alan Storm
quelle
5
Leider scheint der Checkout-Code nicht sehr flexibel zu sein, viele Informationen sind von Vorlagen bis zu den Javascript-Akkordeon-Dateien hartcodiert.
Allan MacGregor
1
Ich habe dieses Tutorial befolgt und konnte einen neuen Schritt in der Onpage-Kaufabwicklung hinzufügen. Auf jeden Fall müssen viele Kerndateien überschrieben werden, um diesen Schritt zu erreichen. Hoffe, dies wird hilfreich excellencemagentoblog.com/magento-onestep-checkout-add-step
Sukeshini

Antworten:

6

Die kurze Antwort auf diese Frage lautete schließlich "Nein". Auf hoher Ebene bedeutete das Hinzufügen eines neuen Checkout-Schritts

  1. Hinzufügen eines neuen Blocks zur One-Step-Checkout-Seite

  2. Wenn Sie diesen Block haben, registrieren Sie sich als Schritt

  3. Verbinden Sie diesen Block mit einem Prototypobjekt, das alle Interaktionen verarbeitet

  4. Umschreiben mehrerer Magento-Kernmethoden, um den Block als Schritt einzufügen

  5. Einige Ajax-Tricks, um den Fortschritt zum Laufen zu bringen.

Dies insgesamt abzudecken, würde den Rahmen einer einzelnen Stapelüberlauf-Frage sprengen. Das Tutorial, das in einer anderen Frage verlinkt ist , hat eine Menge von dem, was Sie brauchen, und ich habe auch eine neue kommerzielle Erweiterung erstellt, um all dies zu vereinfachen .

Alan Storm
quelle
4

Standardmäßig führt magento einige Checkout-Schritte aus. Manchmal müssen Sie jedoch zusätzliche Informationen vom Kunden hinzufügen, um später darauf zurückgreifen zu können. Eine häufig angeforderte Anpassung ist das Hinzufügen des benutzerdefinierten Formulars im Standard-Checkout-Prozess. Dies ist keine gute Vorgehensweise, um Kerndateien zu berühren. Sie können dies über überschreibende Module tun. In diesem Beispiel lautet der Comapnyname Ipragmatech und der Modulname Checkoutstep .

Schritt 1: Fügen Sie im Checkout-Prozess den Schritt Benutzerdefiniert hinzu

Öffnen Sie die Datei Ipragmatech> Checkoutstep> Block> Onepage> Checkoutstep.php und schreiben Sie den folgenden Code

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

Schritt 2: Fügen Sie Schritte hinzu, die und wo Sie im Checkout-Prozess möchten

Öffnen Sie die Datei Ipragmatech> Checkoutstep> Block> Onepage> Checkoutstep.php und schreiben Sie den folgenden Code

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

Schritt 3: Übernehmen Sie den übergebenen Wert des benutzerdefinierten Formulars und legen Sie die Werte des benutzerdefinierten Formulars fest

Öffnen Sie die Datei ipragmatech> Checkoutstep> controller> OnepageController.php und schreiben Sie die folgende Funktion

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

Schritt 4: Speichern Sie die benutzerdefinierten Formularinformationen

Beim Aufruf des Ereignishooks checkout_onepage_controller_success_action. Öffnen Sie die Datei Ipragmatech> Checkoutstep> Model> Observer.php und schreiben Sie Folgendes

    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 - Hinzufügen eines benutzerdefinierten Formulars in der Checkout-Erweiterung ist eine Komplettlösung, um den Checkout-Prozess für Ihre E-Commerce-Website um einen zusätzlichen Schritt zu erweitern. Der Administrator kann Daten aus einer benutzerdefinierten Tabelle im CSV-Format exportieren.

Besuchen Sie den Link, um diese kostenlose Erweiterung zu erhalten: http://www.magentocommerce.com/magento-connect/custom-form-in-checkout.html

Ajay
quelle
0

ja es gibt ein gutes Tutorial dazu hier " http://excellencemagentoblog.com/magento-onestep-checkout-add-step "

Dhanpat Saran
quelle
4
Sie sollten ein wenig erklären, was am Ende dieser URL zu finden ist. Single-Link-Antworten sind nicht die besten Antworten.
Marius
die url selbst sagt magento-onestep-checkout-add-step und das ist es, was die frage verlangt.
Dhanpat Saran
5
Ich stimme Ihnen zu, die Erklärung im Link ist wunderbar, aber schauen Sie sich an, wie die Antworten auf SO-Websites lauten sollten: meta.stackexchange.com/a/8259/224252 und dies: magento.stackexchange.com/help/how -to-answer
Marius