Magento:如何在数据库表中正确安装自定义属性?

时间:2012-08-15 23:21:21

标签: magento

我一直在对我的magento安装进行一些修改以使其符合我的需要,但我来到了不少墙壁。这是我做过的一些事情,只是需要它作为我即将提出的问题的参考。

Magento: Add New Field to Credit Card Form

Magento: How to display customer's phone number on customer information field

Magento: How to Add Order / Payment information to Admin-BackEnd

Magento: How to save data to order_payment and quote_payment

所以我遵循了一些关于添加自定义属性的教程,但我对如何运行脚本以将属性添加到正确的表格感到困惑。

这就是原因。

我注意到已经带有magento的“电话”字段出现在几张桌子上。

eav_attributes(4个实例)然后电话字段的attribute_id也出现在其他表上,它的所有4个实例。现在我已经添加了一个移动电话号码字段,如我之前的问题所示,但我不知道如何在所有具有必要值的表格中显示它。

我现在有限的资源提供更详细的信息,但如果有人能理解我想解释的内容,请帮助我。

谢谢。

1 个答案:

答案 0 :(得分:0)

答案

  • 使用由实体模块的设置资源类执行的设置脚本。

为什么?

虽然有所有EAV属性和实体共有的类和表(例如eav_attribute表和Mage_Eav_Model_Entity_Setup),但每个EAV实体可能都有一个额外的属性信息表。通用设置资源类Mage_Eav_Model_Entity_Setup具有_prepareValues()方法,该方法为所有通用属性元数据(即eav_attribute表中的列)设置默认值。在Mage_Customer的情况下,有customer_eav_attribute表等。 Mage_Customer安装资源类Mage_Customer_Model_Entity_Setup会覆盖此方法,调用父方法并添加存储在customer_eav_attribute表中的更多元数据默认值。

因此,虽然设置资源文件可以在任何上下文(设置类实例)中执行,但如果它正在修改其他模块的EAV配置,则需要使用正确的类来执行此操作。

<?php

$installer = Mage::getResourceModel('customer/setup','customer_setup');

$installer->startSetup();

$installer->addAttribute(
    'customer',
    'new_attribute_code',
    array('label'=>'Label','type' => 'text')
)

$installer->endSetup();

根据添加到客户/客户地址表单的需要,还有其他工作要做。可以在Mage/Customer/sql/customer_setup/中找到此类工作的参考资料。