2011-11-18 88 views
1

我试图添加一些自定义属性的Magento 1.5.1.0的收银台(销售)页从后端(管理员)面板中创建的订单。 我试过这段代码,我可以在eav_attribute表中看到我的新属性,但是当我从后端下订单时,我看不到我的新属性。 我错过了什么..?Magento的定制订单属性

$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(); 

谢谢..

回答

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

3

订购实体笨拙不喜欢正常的实体,他们用平表,而不是EAV,这意味着它是不够的,只是分配的属性。您必须更改平台(which I tried here)或创建其他表格,然后将它们连接到平台。事后看来,我认为我应该采取第二种选择,它更安全。


我一直在寻找更接近订单模板,并可能通过一个较小的使用块黑客类的解决方法。首先让我们对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,如果我读的源代码右)直接复制到数据库表。礼品选项块已在订单的<form>内创建<fieldset>,因此只需要输入字段。

+0

我试图向sales_flat_order和sales_flat_quote添加一个新列,但是当我从管理面板创建新订单时,我看不到任何新属性。 – karpa

+0

表单字段也不是自动的,你需要添加到模板中。它不像产品或客户实体那样容易。 – clockworkgeek

+0

我搜索了很多,但找不到任何事情来帮助我.. 看起来相关的某些链接被添加属性的onepagecheckout,但我想对于adminhtml .. 我知道这些代码必须在这里“应用程序/设计/ adminhtml /默认/缺省的/模板/销售/订单/创建/ data.phtml”但我不知道是什么.. 我可以添加我需要到另一个地方的属性(如客户解决)你认为这更容易..? 谢谢.. – karpa