我正在尝试将一些自定义属性添加到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();
谢谢..
答案 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