【问题标题】:Magento how to add new attribute to sales/order model?Magento 如何为销售/订单模型添加新属性?
【发布时间】:2012-10-23 14:36:46
【问题描述】:

我想为销售/订单添加一个属性,即 Mage_Sales_Model_Order,以存储一些额外的数据。

我发现销售/订单资源使用普通表。而且当我保存订单时,它只保存与表中的列匹配的字段。

添加此属性的正确方法是什么?

【问题讨论】:

标签: magento extend


【解决方案1】:

我会推荐以下几个答案的混合体。您肯定希望通过 config xml 将此代码放入安装脚本中,但如果您想利用 addAttribute 函数,您将希望使用 Mage_Eav_Model_Entity_Setup 作为安装类。所以你的配置 xml 看起来像这样......

<config>
...
    <resources>
        <modulename_setup>
            <setup>
                <module>Your_Module</module>
                <class>Mage_Eav_Model_Entity_Setup</class>
            </setup>               
        </modulename_setup>           
    </resources>
...
</config>

你的安装脚本应该是这样的

$installer = $this;
/* @var $installer Mage_Catalog_Model_Resource_Eav_Mysql4_Setup */

$installer->startSetup();

$installer->addAttribute('sales_order', 'attributename', array(
            'group'             => 'General',
            'label'             => 'Label frontend',
            'note'              => '',
            'type'              => 'string',    //backend_type
            'input'             => 'text', //frontend_input
            'frontend_class'    => '',
            'source'            => '',
            'backend'           => '',
            'frontend'          => '',
            'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
            'required'          => false,
            'visible_on_front'  => false,
            'apply_to'          => 'simple',
            'is_configurable'   => false,
            'used_in_product_listing'   => false,
            'sort_order'        => 5,
        ));

$installer->endSetup();

请记住,这是未经测试的代码,您可能需要调整一些属性选项以使其按您需要的方式运行。

【讨论】:

    【解决方案2】:

    要在订单上添加新属性,您可以使用此代码,但只需一次。获取任意文件,将代码放在那里,执行一次即可删除代码。

    $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
    
            $setup->addAttribute('sales_order', 'attributename', array(
                'group'             => 'General',
                'label'             => 'Label frontend',
                'note'              => '',
                'type'              => 'string',    //backend_type
                'input'             => 'text', //frontend_input
                'frontend_class'    => '',
                'source'            => '',
                'backend'           => '',
                'frontend'          => '',
                'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
                'required'          => false,
                'visible_on_front'  => false,
                'apply_to'          => 'simple',
                'is_configurable'   => false,
                'used_in_product_listing'   => false,
                'sort_order'        => 5,
            ));
    

    【讨论】:

    • 我希望我不必明确指出此代码必须在升级脚本中(因此,没有 Setup 类的显式实例化)...
    • @Bixi 我知道这不是最好的方法或正确的方法。但是可以,没有问题,我已经尝试过了。但你是对的,这个脚本最适合升级脚本,但可以在任何地方工作。
    • 是的,它可以工作,但它是一次性脚本... Magento 提供了执行此类自动化数据库安装/升级的方法(请参阅 Magenta 小姐的回复)。你应该只在升级脚本中修改你的数据库.. 用于持久性和版本控制
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多