ここのチュートリアルに従っていました: 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() が請求ステップでのみ呼び出されたことを確認できました。そのため、フィールドを移動しても記録されませんでした。
レビュー注文ステップで保存する必要がある別のフックはありますか?