Alterar o escopo de um atributo

8

Uma extensão criou uma guia extra no meu menu de categorias. Com 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,
));

Isso resulta em um escopo global. Agora eu gostaria de mudar para "website". Para que eu possa traduzi-lo facilmente para meus outros sites.

Este atributo não é visível na lista de atributos do Magento, então eu tenho que fazer as alterações no banco de dados. Qual chave eu tenho que mudar?

Ronny
fonte

Respostas:

16

Crie um script de atualização com este código:

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

$ setup é uma instância de Mage_Catalog_Model_Resource_Setup ou Mage_Eav_Model_Entity_Setup.

Se você deseja alterar o banco de dados diretamente (eu não o recomendo), é necessário alterar o campo is_globalpara 2da tabela catalog_eav_attributepara o registro com o ID igual ao seu atributo na eav_attributetabela.

Marius
fonte
Você pode substituir 'catalog_category'porMage_Catalog_Model_Category::ENTITY
Dan
@Dan. Eu faria Se pudesse, mas não quero. : D. agora a sério ... isso vai funcionar também. obrigado
Marius
O trecho acima não funcionou para mim. Em vez disso, o que eu tinha que fazer era:$installer->updateAttribute('Mage_Catalog_Model_Category::ENTITY', 'menutopdescription1', 'is_global', '0');
Louis B.
2
@LouisBataillard Editei a resposta (aguardando aprovação). 'global' é usado durante a criação do atributo, que é passado por um método _prepareValues ​​(). E modificado para 'is_global'. Por que os desenvolvedores fazem isso eu não sei (acho confuso mudar a forma como referenciamos a mesma coisa). 'is_global' é o "atributo" do atributo real. E é essa a chave que queremos referenciar durante as atualizações dos atributos.
Darren Felton
E se eu tiver que alterar o escopo para o site Globle instaed no DB?
Ketan Borada