从magento admin中的订单添加自定义订单属性

时间:2010-11-21 00:52:23

标签: attributes magento

我添加了自定义订单属性并更新了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');

他们都没有工作。

3 个答案:

答案 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 );