magento自定义订单属性

时间:2011-11-18 09:25:36

标签: magento attributes orders

我正在尝试将一些自定义属性添加到magento 1.5.1.0的结帐(销售)页面,以便从后端(管理员)面板创建订单。 我尝试了这段代码,我可以在eav_attribute表中看到我的新属性,但是当我从后端发出订单时,我看不到我的新属性。 我错过了什么..?

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');

$setup->addAttribute('5', 'testattr', array(
 'label' => 'testlabel',
 'type' => 'varchar',
 'input' => 'text',
 'visible' => true,
 'required' => false,
 'position' => 5,
 ));


$eavConfig = Mage::getSingleton('eav/config');
$attribute = $eavConfig->getAttribute('5', 'testattr');
$attribute->setData('used_in_forms', array('checkout_register', 'adminhtml_checkout'));
$attribute->save(); 

谢谢..

2 个答案:

答案 0 :(得分:3)

订单实体不像普通实体那样笨拙,它们使用平面表而不是EAV,这意味着只分配属性是不够的。您必须更改平面表(which I tried here)或创建其他表,然后将它们连接到平面表。事后我发现我应该采取第二种选择,它更安全。


我一直在仔细查看订单模板,并且可能会通过较少使用的块进行一种hackish类型的解决方法。首先让我们在layout/local.xml文件中进行更改,以便通过升级覆盖它是安全的;

<layout>
    <adminhtml_sales_order_create_index>
        <reference name="gift_options">
            <block type="adminhtml/template" template="YOUR/TEMPLATE.phtml" />
        </reference>
    </adminhtml_sales_order_create_index>
</layout>

礼品选项块以开放式方式构建,因此添加它相对容易。显然,将YOUR/TEMPLATE.phtml替换为您将创建的文件的路径。正在插入的模板需要具有名称为order[testattr]的输入字段,并且直接复制到数据库表(根据Mage_Adminhtml_Model_Sales_Order_Create,如果我正在阅读源代码对)。礼品选项块已在订单<fieldset>内创建<form>,因此只需要输入字段。

答案 1 :(得分:1)

感谢clockworkgeek的回复。我通过使用一些额外的地址属性找到了解决方案,因为它更容易(我不得不搜索很多)。

所以解决方案是......

<?php 

//Attribute to add
$newAttributeName = "rfc"; //modify this with the name of your attribute

//a) Add EAV Attributes (modify as you needed)
$attribute  = array(
    'type'          => 'varchar',
    'label'         => 'RFC',
    'visible'       => true,
    'required'      => false,
    'user_defined'  => true,
    'searchable'    => false,
    'filterable'    => false,
    'comparable'    => false,
);

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
//Add to customer
$setup->addAttribute('customer_address', $newAttributeName, $attribute);


/* this is not working for some reason. add the columns manually
//b) Add Quote attributes (one page step to step save field)
$setup = new Mage_Sales_Model_Mysql4_Setup('sales_setup');
$setup->getConnection()->addColumn(
        $setup->getTable('sales_flat_quote_address'),
        $newAttributeName,
        'text NULL DEFAULT NULL'
    );
$setup->getConnection()->addColumn(
$setup->getTable('sales_flat_order_address'),
$newAttributeName,
        'text NULL DEFAULT NULL'
);
*/
$eavConfig = Mage::getSingleton('eav/config');
$attribute = $eavConfig->getAttribute('customer_address', $newAttributeName);
$attribute->setData('used_in_forms', array('adminhtml_customer_address',
                'adminhtml_checkout_address')); //'customer_register_address', 'customer_address_edit',
$attribute->save();


?>

然后根据这篇文章编辑文件。 Magento: save custom address attribute in checkout