在Checkout中显示自定义客户字段

时间:2013-11-05 02:04:02

标签: php magento magento-1.7

我成功地为客户添加了自定义字段。但是我需要这些字段显示在一个页面结帐中。

我已覆盖Mage_Customer_Block_Widget_Name并创建了我自己的customer/widget/name.phtml,在sql/xxx_setup/installer-x.y.z.php中添加了属性(将其添加到adminhtml_customercustomer_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();
    }

1 个答案:

答案 0 :(得分:3)

您正在讨论的结帐中的这些字段是地址属性,而不是客户属性。所以你需要以不同的方式加载它们。对于注册用户,您可以使用Mage::getSingleton('customer/session')->getCustomer()->getLastname2(),但不会将其保存到您的地址,因为还没有属性。

根据您希望lastname2可访问的位置,您可以为实体customer_addressquote_addressorder_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>