我成功地为客户添加了自定义字段。但是我需要这些字段显示在一个页面结帐中。
我已覆盖Mage_Customer_Block_Widget_Name
并创建了我自己的customer/widget/name.phtml
,在sql/xxx_setup/installer-x.y.z.php
中添加了属性(将其添加到adminhtml_customer
,customer_account_edit
,{{ 1}}和checkout_register
)并且它们在管理站点中工作正常,但是他们只是不会在结帐表单上工作。该字段显示为但它具有错误的值且没有标签。
我很无能为什么它在客户注册表格中有效但在结账时没有。
添加属性的安装程序代码为:
customer_account_create
name.phtml中的代码是
$attributes = array(
'lastname2' => array(
'frontend_label'=>'Apellido Materno',
'label' => 'Apellido Materno',
'input' => 'text',
'type' => 'varchar',
//System = False and visible true = Show in 'customer_account_create', 'customer_account_edit', 'checkout_register'
'system'=>true,
'visible'=>true, //Watch out!! Only visible fields get processed by the form controllers!!!
'user_defined'=>false,
'used_in_forms' => array('adminhtml_customer', 'customer_account_edit', 'checkout_register','customer_account_create'),
'required' => 0,
'position' =>69
));
foreach($attributes as $attribute_code=>$definition)
{
$installer->addAttribute('customer', $attribute_code, $definition);
/**
* @var Mage_Eav_Model_Config
*/
Mage::getSingleton('eav/config')
->getAttribute('customer', $attribute_code)
->setData('used_in_forms',$definition['used_in_forms'])
->save();
}
答案 0 :(得分:3)
您正在讨论的结帐中的这些字段是地址属性,而不是客户属性。所以你需要以不同的方式加载它们。对于注册用户,您可以使用Mage::getSingleton('customer/session')->getCustomer()->getLastname2()
,但不会将其保存到您的地址,因为还没有属性。
根据您希望lastname2可访问的位置,您可以为实体customer_address
,quote_address
和order_address
创建相应的属性。它们的创建方式与使用
customer
相同
$installer->addAttribute($entityName, $attribute_code, $definition);
但这不是全部。要正确转换属性,您需要在模块config.xml中设置转换规则。例如,请参阅Mage_Sales
的配置。
在global
节点中,存在具有相应规则的节点fieldsets
。有一个节点customer_address
可以将地址属性转换为引用地址属性。在sales_convert_quote
中,有规则将此属性转换为订单属性。
因此,您可以在所有配置中访问您的属性,如下所示:
<global>
<fieldsets>
<customer_address>
<lastname2>
<to_quote_address>*</to_quote_address>
</lastname2>
</customer_address>
<sales_copy_order_billing_address>
<lastname2>
<to_order>*</to_order>
</lastname2>
<sales_copy_order_billing_address>
<sales_copy_order_shipping_address>
<lastname2>
<to_order>*</to_order>
</lastname2>
</sales_copy_order_shipping_address>
<sales_convert_quote_address>
<lastname2>
<to_order_address>*</to_order_address>
<to_customer_address>*</to_customer_address>
</lastname2>
</sales_convert_quote_address>
<sales_convert_order_address>
<lastname2>
<to_quote_address>*</to_quote_address>
</lastnam2e>
<sales_convert_order_address>
<customer_address>
<lastname2>
<to_quote_address>*</to_quote_address>
</lastname2>
</customer_address>
</fieldsets>
</global>