2010-08-11 48 views
15

我想向产品添加属性,并且我想以编程方式执行此操作。所以我加了一个mysql安装-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(); 

语法看起来不错,但是当涉及到执行的这部分代码,这里是问题:

Fatal error: Call to undefined method Mage_Core_Model_Resource_Setup::addAttribute() in /home/frleq/Dev/projets/AVIP/WORKSPACE/avip_magento/app/code/local/Smile/Magentaho/sql/magentaho_setup/mysql4-install-0.1.0.php on line 7

你看到有什么问题吗?代码并不复杂,它是由现有的和worling那些启发......

谢谢

回答

27

您使用了错误的安装程序类。在config.xml中检查你的安装类声明。您正在使用Mage_Core_Model_Resource_Setup。改为尝试Mage_Eav_Model_Entity_Setup

+2

这是正确的,我忘了提Setup类的config.xml中: Company_Module Mage_Eav_Model_Entity_Setup 非常感谢安德斯 – frinux 2010-08-12 07:03:36

+6

不要!因为产品/目录属性中的_prepareValues()方法,使用'Mage_Catalog_Model_Resource_Setup'而不是'Mage_Eav_Model_Entity_Setup'关于产品/目录属性,或者它们的附加属性**不会被设置(即“is_searchable”,“is_visible_on_front”等)设置类。 – nevvermind 2012-04-25 14:59:48

+1

如果您需要使用两者,该怎么办? – surfer190 2016-07-29 08:58:54

12

如果你想使用的产品相关的选项(过滤,搜索等),你应该使用Mage_Catalog_Model_Resource_Eav_Mysql4_Setup类。

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

+1

最佳答案!为了能够设置像visible_on_front这样的产品特定设置,您需要使用Mage_Catalog_ *设置类。 – 2013-10-17 03:26:16

相关问题