Cambiar el alcance de un atributo

8

Una extensión creó una pestaña adicional en el menú de mi categoría. Con este código:

$setup->addAttribute('catalog_category', 'menutopdescription1', array(
    'group'         => 'General',
    'input'         => 'textarea',
    'type'          => 'text',
    'label'         => 'Topmenu description',
    'backend'       => '',
    'visible'       => 1,
    'required'      => 0,
    'is_wysiwyg_enabled' => 1,
    'visible_on_front' => 1,
    'note'=>'Category description for top menu dropdown',
    'is_html_allowed_on_front' => 1,
    'global'        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
));

Esto da como resultado un alcance global. Ahora me gustaría cambiarlo a "sitio web". Entonces puedo traducirlo fácilmente para mis otros sitios web.

Este atributo no está visible en la lista de atributos de Magento, por lo que tengo que hacer los cambios en la base de datos. ¿Qué clave tengo que cambiar?

Ronny
fuente

Respuestas:

16

Cree una secuencia de comandos de actualización con este código:

$setup->updateAttribute('catalog_category', 'menutopdescription1', 'is_global', Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE);

$ setup es una instancia de Mage_Catalog_Model_Resource_Setup o Mage_Eav_Model_Entity_Setup.

Si desea cambiar el DB directamente (no lo recomiendo) es necesario cambiar el campo is_globala 2partir de la tabla catalog_eav_attributepara el registro con el identificador de la misma como su atributo tiene en la eav_attributemesa.

Marius
fuente
Puede reemplazar 'catalog_category'conMage_Catalog_Model_Category::ENTITY
Dan
@Dan. Lo haría si pudiera pero no quiero. :RE. ahora en serio ... eso funcionará también. gracias
Marius
El fragmento de arriba no me funcionó. En cambio, lo que tenía que hacer era:$installer->updateAttribute('Mage_Catalog_Model_Category::ENTITY', 'menutopdescription1', 'is_global', '0');
Louis B.
2
@LouisBataillard He editado la respuesta (esperando aprobación). 'global' se usa durante la creación de atributos, que se pasa a través de un método _prepareValues ​​(). Y modificado a 'is_global'. No sé por qué los desarrolladores hacen esto (me resulta confuso cambiar cómo hacemos referencia a lo mismo). 'is_global' es el "atributo" del atributo real. Y esta es la clave a la que queremos hacer referencia durante las actualizaciones de los atributos.
Darren Felton
¿Qué sucede si tengo que cambiar el alcance al sitio web de Globle instaed en DB?
Ketan Borada