我添加了自定义订单属性并更新了onepage结帐页面。 现在我正在尝试将此属性添加到管理员中的新订单表单。 我正在尝试扩展Mage_Adminhtml_Block_Sales_Order_Create_Form_Account并在_prepareForm()方法中添加一个新字段,类似于添加组和电子邮件字段的方式。
如何获取订单属性? 我尝试了几种方法,但没有任何作用。 这就是我在mysql-install文件中创建自定义顺序属性的方法:
$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 :(得分:0)
您是否已使用正确的eav_attribute
验证该属性是否已添加到数据库中的entity_type_id
表? (我认为sales_order默认为11,但不要假设)
乍一看,看起来你应该使用
$installer->addAttribute('sales/order', 'myattr', $attribute);
HTH, JD
答案 1 :(得分: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'));
答案 2 :(得分:0)
在经过多次试错之后我注意到,新属性必须具有默认(非空)值才能工作。如果属性在数据库中具有“NULL”值,则该属性不可写。所以使用这个属性选项数组对我有用:
$attribute = array(
'type' => 'int',
'label' => 'myattr',
'default' => 0,
'visible' => false,
'required' => false,
'user_defined' => true,
'searchable' => false,
'filterable' => false,
'comparable' => false );