Magento将步骤添加到Onepage签出

Magento将步骤添加到Onepage签出,magento,magento-1.7,Magento,Magento 1.7,我试图在onepage签出中添加一个非常基本的步骤(字面上只是一个带有一些文本和“继续”按钮的div),但由于它们不起作用(我怀疑这是因为它们是在1.7.0.2之前创建的),所以我在下面的示例中进行了总结 我也尝试过将不同例子和论坛帖子中的内容结合起来,但这一周我一直在尝试这样做,但却毫无进展 有人向我推荐了我已经购买并将开始阅读的《使用Magento进行电子商务编程的Php架构师指南》,但我想知道是否有人能为我指出正确的方向,为1.7.0.2的onepage checkout添加一个新步骤 非

我试图在onepage签出中添加一个非常基本的步骤(字面上只是一个带有一些文本和“继续”按钮的div),但由于它们不起作用(我怀疑这是因为它们是在1.7.0.2之前创建的),所以我在下面的示例中进行了总结

我也尝试过将不同例子和论坛帖子中的内容结合起来,但这一周我一直在尝试这样做,但却毫无进展

有人向我推荐了我已经购买并将开始阅读的《使用Magento进行电子商务编程的Php架构师指南》,但我想知道是否有人能为我指出正确的方向,为1.7.0.2的onepage checkout添加一个新步骤


非常感谢您的帮助

我在1.7.0.2中成功地完成了这项工作,遵循以下指南:

总之,您需要扩展/覆盖Mage_Checkout_Block_Onepage::getSteps()以在序列中添加新步骤

创建新步骤的块/模板(在上一步完成时使用Ajax请求加载),块类需要扩展:Mage\u Checkout\u block\u Onepage\u Abstract

您还需要扩展onepagecheckout javascript,因为这将完成很多繁重的工作。原型库有一个很好的方法来实现这一点


最后,您需要扩展控制器类(Mage\u Checkout\u OnepageController)以覆盖任何现有步骤的响应,返回新步骤的内容(使用ajax加载),并处理在新步骤中输入的任何数据(表单字段等)的保存操作。

默认情况下,magento提供一些签出步骤。但有时您需要添加来自客户的额外信息以供将来参考。一个常见的定制请求是在默认签出过程中添加定制表单。 这不是接触核心文件的好做法。您可以通过覆盖模块来实现这一点。 在本例中,Comapnyname为IPFragmatech,模块名称为Checkoutstep

步骤1:在签出过程中添加自定义步骤

打开ipfragmatech>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();
       }
     }
    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;
   }
}
步骤2:在结账过程中添加您想要的步骤和位置

打开ipfragmatech>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();
       }
     }
    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;
   }
}
步骤三:抓取自定义表单提交值,设置自定义表单值

打开ipfragmatech>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:保存自定义表单信息

签出时\u onepage\u控制器\u成功\u操作 事件挂钩被称为。打开ipfragmatech>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–在结帐扩展中添加自定义表单是为您的电子商务网站在结帐过程中添加额外步骤的完整解决方案。它允许管理员以CSV格式从自定义表导出数据。 访问链接以获得此免费扩展