2013-03-28 55 views
2

我嘗試在Magento onepage結帳過程中創建一個額外的步驟。 我正在按照位於http://www.excellencemagentoblog.com/magento-onestep-checkout-add-step的教程進行操作,但是在審查之前在結尾處特別添加了一個步驟。添加步驟到Magento onepage結帳過程

我的文件夾/文件結構如下。 (widget.xml忽略) Folder structure

我已經上傳的代碼在它的當前狀態,這個要點: https://gist.github.com/Relequestual/5263498

我的主題設置爲「新」。

我是var_dumping $ this-> getSteps()它表明'testcheck'返回null。 在config.xml中,如果我在gobal下更改,在最後使用'_TestCheck'阻止,結帳,重寫,onepage到同一個類,結帳根本不顯示,但'測試檢查'出現在進度部分在右邊。當我恢復這個變化時,它會在var轉儲中顯示爲不爲空,像這樣... testcheck vardump 但是,我仍然沒有看到實際添加到頁面的步驟。

我以前沒有做過任何magento,所以感覺有點在我的頭上。我期望xml配置文件存在一些問題,但是我已經在這個問題上工作了兩天了,而且我還有什麼可以嘗試的。

我知道這個問題可能聽起來與其他人類似,但是我無法找到一個OP與我所看到的症狀相同的問題。

+0

目前的解決方案,我用這個插件http://www.aitoc.com/en/magentomods_checkoutfieldsmanager.html調查,然後顯示/隱藏收音機基於國家和郵政編碼的按鈕用戶選擇/輸入 – Relequestual

+0

對不起,成爲壞消息的持有者,但這是一個相當複雜的任務,事實上,你以前沒有碰過Magento,這讓我非常擔心。在http://magento.stackexchange.com上試試你的問題,你可能會有更多的運氣,或找到能指導你完成的人。祝你好運。 –

+0

很高興我不再與Magento有任何關係=] – Relequestual

回答

0

默認情況下,magento提供一些結帳步驟。但有時您需要添加客戶的額外信息以備將來參考。常見的請求定製是在默認結帳過程中添加自定義表單。 這不是觸摸核心文件的好習慣。你可以通過覆蓋模塊來做到這一點。 在此示例Comapnyname是Ipragmatech和模塊名稱是Checkoutstep

步驟1:添加自定義步驟在結賬過程

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

步驟2:添加步驟,這些步驟,並且其中您在結賬過程中要

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

步驟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的 - 在結帳擴展添加自定義窗體是一個完整的解決方案,以增加額外的步驟,在結算過程中爲您的電子商務網站。它允許管理員以CSV格式導出自定義表格中的數據。

訪問的鏈接得到這個免費的擴展http://www.magentocommerce.com/magento-connect/custom-form-in-checkout.html