Modifier la portée d'un attribut

8

Une extension a créé un onglet supplémentaire dans mon menu de catégorie. Avec ce code:

$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,
));

Il en résulte une portée mondiale. Maintenant, je voudrais le changer en "site Web". Je peux donc facilement le traduire pour mes autres sites Web.

Cet attribut n'est pas visible dans la liste des attributs de Magento, donc je dois faire les changements dans la base de données. Quelle clé dois-je changer?

Ronny
la source

Réponses:

16

Créez un script de mise à niveau avec ce code:

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

$ setup est une instance de Mage_Catalog_Model_Resource_Setup ou Mage_Eav_Model_Entity_Setup.

Si vous voulez changer le db directement (je ne recommande pas) , vous devez modifier le champ is_globalà 2partir de la table catalog_eav_attributepour l'enregistrement avec l'ID même que votre attribut a dans le eav_attributetableau.

Marius
la source
Vous pouvez remplacer 'catalog_category'parMage_Catalog_Model_Category::ENTITY
Dan
@Dan. Je le ferais si je le pouvais mais je ne veux pas. :RÉ. maintenant sérieusement ... cela fonctionnera aussi. merci
Marius
L'extrait ci-dessus n'a pas fonctionné pour moi. Au lieu de cela, je devais faire:$installer->updateAttribute('Mage_Catalog_Model_Category::ENTITY', 'menutopdescription1', 'is_global', '0');
Louis B.
2
@LouisBataillard J'ai édité la réponse (en attente d'approbation). 'global' est utilisé lors de la création de l'attribut, qui est transmis via une méthode _prepareValues ​​(). Et modifié en «is_global». Je ne sais pas pourquoi les développeurs font cela (je trouve confus de changer la façon dont nous référençons la même chose). 'is_global' est "l'attribut" de l'attribut réel. Et c'est la clé que nous voulons référencer lors des mises à jour des attributs.
Darren Felton
Que faire si je dois modifier la portée du site Web Globle instaed dans DB?
Ketan Borada