Ändern Sie den Bereich eines Attributs

8

Eine Erweiterung hat eine zusätzliche Registerkarte in meinem Kategoriemenü erstellt. Mit diesem 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,
));

Dies führt zu einem globalen Geltungsbereich. Jetzt möchte ich es in "Website" ändern. So kann ich es einfach für meine anderen Websites übersetzen.

Dieses Attribut ist in der Attributliste von Magento nicht sichtbar, daher muss ich die Änderungen in der Datenbank vornehmen. Welchen Schlüssel muss ich ändern?

Ronny
quelle

Antworten:

16

Erstellen Sie ein Upgrade-Skript mit diesem Code:

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

$ setup ist eine Instanz von Mage_Catalog_Model_Resource_Setup oder Mage_Eav_Model_Entity_Setup.

Wenn Sie die db direkt ändern wollen (ich würde es nicht empfehlen) müssen Sie das Feld ändern , is_globalum 2aus der Tabelle catalog_eav_attributefür den Datensatz mit der ID das gleiche wie Ihr Attribut in der hat eav_attributeTabelle.

Marius
quelle
Sie können ersetzen 'catalog_category'durchMage_Catalog_Model_Category::ENTITY
Dan
@Dan. Ich würde, wenn ich könnte, aber ich will nicht. : D. jetzt im Ernst ... das wird auch funktionieren. danke
Marius
Das obige Snippet hat bei mir nicht funktioniert. Stattdessen musste ich $installer->updateAttribute('Mage_Catalog_Model_Category::ENTITY', 'menutopdescription1', 'is_global', '0');
Louis B.
2
@ LouisBataillard Ich habe die Antwort bearbeitet (wartet auf Genehmigung). 'global' wird bei der Attributerstellung verwendet, die über eine _prepareValues ​​() -Methode übergeben wird. Und geändert zu 'is_global'. Warum die Entwickler das tun, weiß ich nicht (ich finde es verwirrend zu ändern, wie wir auf dasselbe verweisen). 'is_global' ist das "Attribut" des tatsächlichen Attributs. Dies ist der Schlüssel, auf den wir bei Aktualisierungen von Attributen verweisen möchten.
Darren Felton
Was ist, wenn ich den Gültigkeitsbereich auf die von Globle installierte Website in DB ändern muss?
Ketan Borada