默認情況下,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
目前的解決方案,我用這個插件http://www.aitoc.com/en/magentomods_checkoutfieldsmanager.html調查,然後顯示/隱藏收音機基於國家和郵政編碼的按鈕用戶選擇/輸入 – Relequestual
對不起,成爲壞消息的持有者,但這是一個相當複雜的任務,事實上,你以前沒有碰過Magento,這讓我非常擔心。在http://magento.stackexchange.com上試試你的問題,你可能會有更多的運氣,或找到能指導你完成的人。祝你好運。 –
很高興我不再與Magento有任何關係=] – Relequestual