2016-02-01 58 views
0

我想添加一個屬性到我在Magento的報價,但我有一些麻煩。我已經完成了與另一個模塊已經相同,它的作品像一個魅力,所以我真的很無奈這次是什麼錯誤。Magento添加屬性來報價

在我的Magento頁面上,當客戶點擊'繼續結帳'時,將會調用一個靜態CMS頁面。在此CMS頁面上,他可以選擇添加一些信息,這些信息應該添加到報價中,然後再訂購。

當表單被提交,結果收到了執行該代碼:

$quote = Mage::getModel('checkout/session')->getQuote(); 
$quote->setfirstname($firstname); 
$quote->setlastname($lastname); 
$quote->setlocation($location); 
$quote->save(); 

表sales_flat_quote和sales_flat_order已擴展爲字段名字,姓氏,位置。

而且在我的模塊config.xml中的代碼已經被添加:

<global> 
    <fieldsets> 
     <sales_convert_quote> 
      <firstname> 
       <to_order>*</to_order> 
      </firstname> 
     </sales_convert_quote> 
     <sales_convert_quote> 
      <lastname> 
       <to_order>*</to_order> 
      </lastname> 
     </sales_convert_quote> 
     <sales_convert_quote> 
      <location> 
       <to_order>*</to_order> 
      </location> 
     </sales_convert_quote> 

    </fieldsets> 

然而,當已下訂單的附加字段不會出現在sales_flat_quote或sales_flat_order。缺少什麼或者我做錯了什麼?

+0

嗨,大家好,我可以自己回答一部分問題。 FTP服務器沒有上傳正確的文件,所以我所有的工作都沒有上傳,這就是爲什麼它沒有工作... – Tom

回答

0

你必須寫一些事件觀察者來捕獲報價保存和加載事件。所以打開你的模塊​​3210文件並在標籤內輸入以下代碼。

<events> 

<sales_quote_save_before> <!-- Event Called Before Quote Object is saved --> 

<observers> 

<save_before> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>saveQuoteBefore</method> <!-- name of function --> 

</save_before> 

</observers> 

</sales_quote_save_before> 

<sales_quote_save_after> <!-- Event called After Quote Object is saved --> 

<observers> 

<save_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>saveQuoteAfter</method> <!-- name of function --> 

</save_after> 

</observers> 

</sales_quote_save_after> 

<sales_quote_load_after> <!-- Event called when Quote Object is loaded --> 

<observers> 

<load_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>loadQuoteAfter</method> <!-- name of function --> 

</load_after> 

</observers> 

</sales_quote_load_after> 

<sales_model_service_quote_submit_after> <!-- Event called after order placed --> 

<observers> 

<sales_model_service_quote_submit_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>saveOrderAfter</method> <!-- name of function --> 

</sales_model_service_quote_submit_after> 

</observers> 

</sales_model_service_quote_submit_after> 

<sales_order_load_after> <!-- Event called after Order Object is loaded --> 

<observers> 

<sales_order_load_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>loadOrderAfter</method> <!-- name of function --> 

</sales_order_load_after> 

</observers> 

</sales_order_load_after> 

</events> 

接下來,您需要在Model文件夾中創建Observer類。因此,在您的模塊模型文件夾中創建一個Observer.php

<?php 
class Excellence_Custom_Model_Observer{ 

public function saveQuoteBefore($evt){ 

$quote = $evt->getQuote(); 

$post = Mage::app()->getFrontController()->getRequest()->getPost(); 

if(isset($post['custom']['ssn'])){ 

$var = $post['custom']['ssn']; 

$quote->setSsn($var); 

} 

} 


public function saveQuoteAfter($evt){ 

$quote = $evt->getQuote(); 

if($quote->getSsn()){ 

$var = $quote->getSsn(); 

if(!empty($var)){ 

$model = Mage::getModel('custom/custom_quote'); 

$model->deteleByQuote($quote->getId(),'ssn'); 

$model->setQuoteId($quote->getId()); 

$model->setKey('ssn'); 

$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->getSsn()){ 

$var = $quote->getSsn(); 

if(!empty($var)){ 

$model = Mage::getModel('custom/custom_order'); 

$model->deleteByOrder($order->getId(),'ssn'); 

$model->setOrderId($order->getId()); 

$model->setKey('ssn'); 

$model->setValue($var); 

$order->setSsn($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); 

} 

} 

}