我在这里进行了演练:http://www.excellencemagentoblog.com/magento-add-custom-fields-checkout-page。
我最初要求打开一个关于自定义字段的问题,当字段移到审核订单步骤而不是作为引用文章的结算步骤时,该字段不会保存到表中。所以我正在改写我的问题,因为我尽可能地缩小了这个范围。这是我的Observer类
class Excellence_Custom_Model_Observer{
public function saveQuoteBefore($evt){
$quote = $evt->getQuote();
$post = Mage::app()->getFrontController()->getRequest()->getPost();
if(isset($post['custom']['sales_person'])){
$var = $post['custom']['sales_person'];
$quote->setSalesPerson($var);
}
}
public function saveQuoteAfter($evt){
$quote = $evt->getQuote();
if($quote->getSalesPerson()){
$var = $quote->getSalesPerson();
if(!empty($var)){
$model = Mage::getModel('custom/custom_quote');
$model->deteleByQuote($quote->getId(),'sales_person');
$model->setQuoteId($quote->getId());
$model->setKey('sales_person');
$model->setValue($var);
$model->save();
}
}
}
public function loadQuoteAfter($evt){
$quote = $evt->getQuote();
$model = Mage::getModel('custom/custom_quote');
$data = $model->getByQuote($quote->getId());
foreach($data as $key => $value){
$quote->setData($key,$value);
}
}
public function saveOrderAfter($evt){
$order = $evt->getOrder();
$quote = $evt->getQuote();
if($quote->getSalesPerson()){
$var = $quote->getSalesPerson();
if(!empty($var)){
$model = Mage::getModel('custom/custom_order');
$model->deleteByOrder($order->getId(),'sales_person');
$model->setOrderId($order->getId());
$model->setKey('sales_person');
$model->setValue($var);
$order->setSalesPerson($var);
$model->save();
}
}
}
public function loadOrderAfter($evt){
$order = $evt->getOrder();
$model = Mage::getModel('custom/custom_order');
$data = $model->getByOrder($order->getId());
foreach($data as $key => $value){
$order->setData($key,$value);
}
}
}
通过Mage :: log()我能够看到saveQuoteBefore()仅在结算步骤中被调用。这就是为什么当我移动场地时,它从未记录过。
除了审核订单步骤之外,我还需要另外一个钩子吗?
答案 0 :(得分:0)
在这篇文章中找到我的答案。很抱歉浪费了一个问题,但希望有人能够受益。
How to get Post Data from Magento's Onepage Checkout?
基本上js文件正在序列化输入字段。我不得不使用协议数组的字段名称。