Добавление шага к одностраничному оформлению заказа

18

Существуют ли какие-либо расширения, модули Magento с открытым исходным кодом или учебные пособия, которые облегчают добавление шага к оформлению заказа на одной странице? Я несколько раз ткнул в основной код, и кажется, что есть много жестко закодированной информации о шагах.

Алан Сторм
источник
5
К сожалению, код Checkout выглядит не очень гибким, большая часть информации жестко запрограммирована из шаблонов в файлы аккордеонных файлов javascript.
Аллан МакГрегор
1
Я следовал этому руководству и смог добавить новый шаг в одностраничном оформлении заказа. В любом случае, для достижения этого шага необходимо переопределить множество основных файлов. Надеюсь, что это поможет excellencemagentoblog.com/magento-onestep-checkout-add-step
Sukeshini

Ответы:

6

Короткий ответ на этот вопрос в итоге был «Нет». С высокого уровня добавление нового шага оформления заказа означало

  1. Добавление нового блока на страницу оформления заказа

  2. Когда этот блок регистрируется как шаг

  3. Соедините этот блок с прототипом объекта, который обрабатывает все взаимодействия

  4. Переписать несколько основных методов Magento, чтобы вставить блок как шаг

  5. Некоторые хитрости Ajax, чтобы заставить вещи прогресса работать.

Полное рассмотрение этого вопроса выходит за рамки одного вопроса переполнения стека. Учебник, связанный с другим вопросом, содержит много того, что вам нужно, и я также создал новое коммерческое расширение, чтобы упростить все это .

Алан Сторм
источник
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> 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 - это комплексное решение для добавления дополнительного шага в процесс оформления заказа для вашего сайта электронной коммерции. Это позволяет администратору экспортировать данные из пользовательской таблицы в формате 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, и это то, о чем спрашивает вопрос.
Дханпат Саран
5
Я согласен с вами, объяснение в ссылке прекрасно, но посмотрите, как ответы должны быть на SO сайтах: meta.stackexchange.com/a/8259/224252 и это: magento.stackexchange.com/help/how к ответу
Мариус