Erstellen Sie programmgesteuert einen neuen Attributsatz, während Sie von einem anderen erben


7

Ich erstelle programmgesteuert Attribute und Attributmengen. Die Attribute funktionieren wie sie sollten, aber mit den Attributmengen habe ich ein Problem.

Wenn ich einen Attributsatz erstelle, kann ich ihn nicht von einem anderen Satz (zum Beispiel dem Standardsatz) erben lassen. Ich habe viel gesucht, konnte aber keine guten Informationen finden, die mir weiterhelfen könnten.

Mein erster Gedanke, dass es eine Funktion geben sollte, mit der Sie einen Satz duplizieren und bearbeiten können. Ich konnte es nicht finden.

Mein zweiter Gedanke war, die gesamte Menge neu zu erstellen, aber ich konnte keine Funktion finden, um die Gruppen aus einer Attributmenge abzurufen, die ich möchte.

Ich bin ziemlich neu in Magento. Es tut mir leid, wenn ich gerade etwas verpasst habe, aber ich stecke derzeit fest. Alle Lösungen / Vorschläge werden sehr geschätzt.

Antworten:


11

Nachdem Sie es erneut ausprobiert, viel durcheinander gebracht und endlich die richtige Antwort gefunden haben, funktioniert dies:

$entityTypeId = Mage::getModel('catalog/product')
                  ->getResource()
                  ->getEntityType()
                  ->getId(); //product entity type

$attributeSet = Mage::getModel('eav/entity_attribute_set')
                  ->setEntityTypeId($entityTypeId)
                  ->setAttributeSetName("test_set");

$attributeSet->validate();
$attributeSet->save();

$attributeSet->initFromSkeleton($entityTypeId)->save();

Sie müssen speichern, bevor Sie dies tun initFromSekeleton(). Sonst funktioniert es einfach nicht.


Wie Robbie sagte, können Sie einfach Mage_Catalog_Model_Product_Attribute_Set_Api::createalles für Sie tun
Erfan

10

Nur eine Anmerkung, es scheint, dass das Attributsatz-API-Modell dies selbst tun kann:

$newSetName    = 'My New Set';
$originalSetId = 4; // the set to base the new one off

/** @var Mage_Catalog_Model_Product_Attribute_Set_Api */
Mage::getModel('catalog/product_attribute_set_api')
    ->create($newSetName, $originalSetId);

1
Oh schön. Dies ist eine viel bessere Lösung. Vielleicht gab es sie vor 2 Jahren noch nicht
Erfan

10

Sehen Sie, wie die Attributgruppen vom Backend erstellt (geerbt) werden. Überprüfen Sie diese Methode : Mage_Adminhtml_Catalog_Product_SetController::saveAction().
In dieser Methode gibt es diese Zeile, die den Attributsatz 'klont':

$model->initFromSkeleton($this->getRequest()->getParam('skeleton_set')); 

Wo ->getParam('skeleton_set')ist das Attribut festgelegt, das geklont werden soll? Grundsätzlich müssen Sie so etwas tun:

$cloneSetId = 4;//or anything else
$entityTypeId = Mage::getModel('catalog/product')->getResource()->getTypeId(); //product entity type
$model = Mage::getModel('eav/entity_attribute_set'); //instantiate the model
$model->setEntityTypeId($entityTypeId);//attribute set is used for products
$model->setAttributeSetName('Attribute set name here');//set the attribute set name
$attributeSet->save(); // save before initFromSkeleton
$model->initFromSkeleton($cloneSetId);//clone one attribute set
$model->save();//save the new attribute set
//do other modifications here

Hmm, es scheint, dass dieser Code irgendwie nur die Gruppen kopiert und nicht die Attribute in diesen Gruppen.
Deep Frozen

Dies bedeutet, dass ich möglicherweise etwas verpasst habe. Denn in der initFromSkeletonMethode gibt es diese Zeile $newGroup->setAttributes($newAttributes);. Dies sollte einige Attribute festlegen. Stellen Sie sicher, dass Sie einen gültigen Satz klonen. Außerdem können Sie den debuggen Mage_Adminhtml_Catalog_Product_SetController::saveAction()und versuchen, ihn in Ihrem Code zu simulieren. dass man sich an die Arbeit macht.
Marius

Es ist eine gültige ID (ich verwende nur 4, eine vorhandene Standardeinstellung), aber ich kann nichts finden, um sie zu beheben: S
Deep Frozen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.