2010-11-21 115 views
1

我添加了自定義訂單屬性並更新了onepage結帳頁面。 現在我試圖將該屬性添加到管理員中的新訂單表單。 我試圖擴展Mage_Adminhtml_Block_Sales_Order_Create_Form_Account,並在_prepareForm()方法中添加一個類似於添加組和郵件字段的新字段。將自定義訂單屬性添加到來自magento admin的訂單

如何獲得訂單屬性? 我嘗試了幾種方法,但沒有任何工作。 這是我如何創造MySQL的安裝文件中的自定義命令屬性:

$attribute = array(
     'type'   => 'int', 
     'label'   => 'myattr', 
     'visible'  => false, 
     'required'  => false, 
     'user_defined' => false, 
     'searchable' => false, 
     'filterable' => false, 
     'comparable' => false, 
); 
$installer->addAttribute('order', 'myattr', $attribute); 

,這是我怎麼想獲取的屬性:

$res = Mage::getSingleton('core/resource'); 
$eav = Mage::getModel('eav/config'); 
$attr = $eav->getAttribute('sales/order', 'myattr'); 

或與此:

$entityType = Mage::getModel('eav/config')->getEntityType('order'); 
$entityTypeId = $entityType->getEntityTypeId(); 

$attribute = Mage::getResourceModel('eav/entity_attribute_collection') 
       ->setCodeFilter('myattr') 
       ->setEntityTypeFilter($entityTypeId) 
       ->getFirstItem(); 

或本:

$order = Mage::getResourceSingleton('sales/order'); 
$myAttr = $order->getAttribute('myattr'); 

他們都沒有工作。

+0

被遺棄的問題是一個痛苦。您的問題是否已解決(無論是否有答案)?如果是這樣,請考慮自己回答問題。 – 2011-01-31 16:13:37

回答

0

您是否驗證過將該屬性添加到數據庫中的eav_attribute表中並使用正確的entity_type_id? (我認爲是sales_order的11默認,但不要以爲)

乍一看,它看起來像你應該使用

$installer->addAttribute('sales/order', 'myattr', $attribute); 

HTH, JD

+0

我使用$ installer-> addAttribute('order','myattr',$ attribute);但我認爲沒關係,因爲我在我的sql安裝程序中使用了Mage_Sales_Model_Mysql4_Setup類。訂單使用平面表sales_flat_order,因此我可能需要以不同於客戶或地址屬性的方式向表單添加字段。有沒有辦法將它添加到Mage_Adminhtml_Block_Sales_Order_Create_Form_Account的_prepreForm?也許類似的文件,看看應該怎麼做? – pablo 2010-11-21 18:09:05

+0

你沒有回答我的第一個問題。是'eav_attribute'表中的屬性。如果不存在,那麼您需要更改調用'$ installer-> adAttribute(...)'的方式 – 2010-11-21 22:08:14

+0

該屬性不在eav_attribute中,但sales_order字段的非屬於eav_attribute表中。 – pablo 2010-11-21 22:55:43

0

銷售/順序使用使用支持屬性的EAV模型,這在1.4.0左右還不確定。 我想現在你應該做的:

$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'my_column', 'decimal(12,4)'); 

你仍然可以添加屬性爲靜態字段

$installer->addAttribute('order', 'my_column', array('type'=>'static')); 
0

我注意到經過多次試驗和錯誤是新的屬性必須有一個默認(非空)值才能工作。不知怎的,如果屬性在數據庫中有一個'NULL'值,則該屬性是不可寫的。因此,使用此屬性選項陣列爲我工作:

$attribute = array(
'type'   => 'int', 
'label'   => 'myattr', 
'default'  => 0, 
'visible'  => false, 
'required'  => false, 
'user_defined' => true, 
'searchable' => false, 
'filterable' => false, 
'comparable' => false); 
相關問題