Magento的添加工序,以Onepage结帐(Magento Adding Step to One

2019-08-02 16:24发布

我试图步骤中添加一个非常基本的(真的只是一个div一些文字和继续按钮)到onepage结账,但已经提出了短期,因为他们不工作(我怀疑这是因为他们之前创建的1.7.0.2),以下的实施例中,当这里(Fontis) , 这里(inchoo)和这里(Magento的论坛) 。

我也试图从不同的例子和论坛帖子合并位,但我已经得到了本周我一直在试图做到这一点任何地方。

我一直在推荐这本书的PHP建筑师指南电子商务编程与Magento的'我已经购买并开始阅读,但我想知道如果有人能和蔼点我在正确的方向在添加一个新的台阶,以1.7.0.2的onepage结账?

非常感谢您的帮助!

Answer 1:

我在本指南按照1.7.0.2成功做到了这一点:

http://www.excellencemagentoblog.com/magento-onestep-checkout-add-step

总之,你需要扩展/覆盖Mage_Checkout_Block_Onepage :: getSteps()添加序列中的新的一步。

创建新的台阶的块/模板你块类将需要扩展(当使用前面的步骤完成一个Ajax请求加载):Mage_Checkout_Block_Onepage_Abstract

您还需要延长onepagecheckout JavaScript作为这样做很多繁重的。 Prototype库有这样做的一个很好的方式。

最后,您将需要扩展控制器类(Mage_Checkout_OnepageController)覆盖的任何现有措施的回应,回报您的新的一步的内容(使用AJAX加载),并处理任何数据的保存动作(表单字段等)中输入您的新的一步。



Answer 2:

默认情况下,Magento的给出了一些结帐步骤。 但有时你需要从客户以供将来参考添加额外的信息。 一个常见的要求定制是添加自定义窗体中的默认结账过程。 这是不碰的核心文件很好的做法。 您可以通过重写模块做到这一点。 在这个例子中是Comapnyname和Ipragmatech模块名称是Checkoutstep。

第一步:添加在结账过程中自定义步骤

打开Ipragmatech> Checkoutstep>块> 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();
       }
     }

第二步:添加并在那里你在结账过程中需要哪些步骤

打开Ipragmatech> Checkoutstep>块> 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;
   }
}

第三步:抓住自定义表单的提交值和设定自定义表单的值

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

第四步:保存自定义窗体信息

当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的 - 添加自定义窗体在结帐扩展是一个完整的解决方案,以增加额外的步骤,在结算过程中为您的电子商务网站。 它允许管理员从定制表格数据导出为CSV格式。 访问链接得到这个免费的扩展http://www.magentocommerce.com/magento-connect/custom-form-in-checkout.html



文章来源: Magento Adding Step to Onepage Checkout