2010-08-11 15 views
15

Me gustaría agregar un atributo a los productos, y quiero hacerlo mediante programación. Por lo que añade un mysql-install-0.1.0.php a un módulo de la mía, y añadí esto (inspirado en los ejemplos existentes):Cómo agregar un atributo mediante programación

<?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(); 

Sintaxis parece bien, pero cuando se trata de ejecutar esta parte de el código, aquí está el problema:

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

¿Ves lo que está mal? El código no es tan complicado, y se inspira de los ya existentes y worling ...

Gracias

Respuesta

27

Está utilizando la clase de instalación incorrecta. Verifique su declaración de clase de configuración en config.xml. Usted está usando Mage_Core_Model_Resource_Setup. Pruebe Mage_Eav_Model_Entity_Setup en su lugar.

+2

Así es, se me olvidó mencionar la clase de instalación en config.xml: Company_Module Mage_Eav_Model_Entity_Setup Muchas gracias Anders – frinux

+6

No! Utilice 'Mage_Catalog_Model_Resource_Setup' en lugar de' Mage_Eav_Model_Entity_Setup' con respecto a los atributos de Productos/Catálogo o sus atributos adicionales ** no se establecerán ** (es decir, "is_searchable", "is_visible_on_front", etc.) debido al método '_prepareValues ​​()' en el clase de configuración. – nevvermind

+1

¿Qué sucede si necesita usar ambos? – surfer190

12

Si desea utilizar opciones relacionadas con el producto (filtrable, etc.) de búsqueda, se debe utilizar Mage_Catalog_Model_Resource_Eav_Mysql4_Setup clase.

En las últimas versiones de Magento debe usar Mage_Catalog_Model_Source_Setup class.

+1

¡Mejor respuesta! Para poder establecer las configuraciones específicas del producto como visible_on_front, deberá usar una clase de configuración Mage_Catalog_ *. –

Cuestiones relacionadas