如何以编程方式添加属性

fri*_*nux 16 php magento

我想为产品添加一个属性,我想以编程方式执行此操作.所以我在我的模块中添加了一个mysql-install-0.1.0.php,我添加了这个(灵感来自现有的例子):

<?php

$installer = $this;

$installer->startSetup();

$installer->addAttribute('catalog_product', 'collection', array(
        'type'              => 'varchar',
        'backend'           => '',
        'frontend'          => '',
        'label'             => 'Collection',
        'input'             => 'text',
        'class'             => '',
        'source'            => '',
        'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
        'visible'           => false,
        'required'          => false,
        'user_defined'      => false,
        'default'           => '',
        'searchable'        => false,
        'filterable'        => false,
        'comparable'        => false,
        'visible_on_front'  => false,
        'unique'            => false,
        'apply_to'          => '',
        'is_configurable'   => false
    ));

$installer->endSetup();
Run Code Online (Sandbox Code Playgroud)

语法似乎没问题,但是当涉及到执行这部分代码时,问题就出现了:

致命错误:在/home/frleq/Dev/projets/AVIP/WORKSPACE/avip_magento/app/code/local/Smile/Magentaho/sql/magentaho_setup/mysql4-install-0.1.0中调用未定义的方法Mage_Core_Model_Resource_Setup :: addAttribute()第7行的.php

你看到了什么问题吗?代码并不是那么复杂,它的灵感来自现有的和令人担忧的......

谢谢

小智 27

您使用的是错误的安装类.检查config.xml中的安装程序类声明.你正在使用Mage_Core_Model_Resource_Setup.试试吧Mage_Eav_Model_Entity_Setup.

  • 别!使用`Mage_Catalog_Model_Resource_Setup`而不是关于产品/目录属性的'Mage_Eav_Model_Entity_Setup`或它们的附加属性**将不会被设置(即"is_searchable","is_visible_on_front"等),因为它中的`_prepareValues()`方法安装类. (6认同)
  • 没错,我忘了在config.xml中提到Setup类:<setup> <module> Company_Module </ module> <class> Mage_Eav_Model_Entity_Setup </ class> </ setup>非常感谢Anders (2认同)

Rom*_*tko 13

如果要使用与产品相关的选项(可过滤,可搜索等),则应使用Mage_Catalog_Model_Resource_Eav_Mysql4_Setup类.

在最新版本的Magento中,您应该使用Mage_Catalog_Model_Resource_Setup类.