Magento

Multi Select Attribute über die Magento API hinzufügen und editieren

Icon NetzkollektivVon Dominik Krebs, Geschäftsführer, CTO

Mittlerweile wurde diese Funktionalität nativ in Magento integriert. Insbesondere aber das Setzen der konkreten Werte im Produkt bereitet immer wieder Probleme, die im letzten Absatz beschrieben sind.

Magento bietet von Haus aus Multi-Select Attribute an, mit welchen einem Produkt mehrere Werte aus vorgegebenen Optionen zugewiesen werden können. Über das Backend können diese problemlos angelegt und bearbeitet werden. Möchte man die Attribute aber automatische durch eine Routine generieren lassen und mit Werten belegen stößt man schnell an die Grenzen der API-Funktionen von Magento.

Im folgenden Artikel wird der komplette Workflow gezeigt, um

  • solche Attribute programmatisch anzulegen
  • die Attribute einem Attribut-Set zuzuweisen
  • Attribut-Optionen programmatisch hinzuzufügen
  • den jeweiligen Produkten Werte zuzuweisen

Multi-Select Attribut erstellen

In diesem Artikel wird davon ausgegangen, dass das Attribut noch nicht in Magento vorhanden ist und über eine Routine angelegt werden soll. Hierzu steht die API-Methode catalog_product_attribute.create zur Verfügung, mit welcher ein Attrribut mit all seinen Eigenschaften erstellt werden kann. Als Beispiel legen wir das Attribut „multi-attribute“ an:

$attributeId = $proxy->call($sessionId, 'catalog_product_attribute.create', array(
    'multi-attribute',
    array(
        'frontend_label'            => 'Multi-Attribute',
        'frontend_input'            => 'multiselect',
        'is_filterable'             => 1,
        'is_filterable_in_search'   => 1,
        'is_configurable'           => 1,
        'apply_to'                  => 'simple'
    )
));

Attribute einer Attributset-Gruppe zuweisen

Hat man das Attribut angelegt, muss es einer Attribut-Set Gruppe zugewiesen werden. Ansonsten wird das Attribut im Backend nicht angezeigt und auch über die API können dem Produkt keine Werte für das Attribut hinzugefügt werden.

$proxy->call($sessionId, 'catalog_product_attribute_set.addAttributeToGroup', array(
    '4',
    'General',
    'multi-attribute'
));

Attribut-Optionen hinzufügen

Nun ist das Attribut in den Produkten die dem jeweiligen Attribut-Set zugeordnet sind zwar sichtbar, aber es besitzt noch keinerlei Attribut-Optionen. Damit kann im Backend vorerst nichts ausgewählt werden. Darum fügen wir nun die Attribut-Optionen hinzu.
Hierbei ist es wichtig, die Ids der Optionen zwischenzuspeichern, da diese im nächsten Schritt benötigt werden.

$optionIds = array();
foreach (array('Wert 1','Wert 2','Wert 3','Wert 4') as $opt) {
    $optionIds[] = $proxy->call($sessionId, 'catalog_product_attribute_option.create',array(
      'multi-attribute',
      $opt
    ));
}

Multi-Select Attributwerte einem konkreten Produkt zuweisen

Das Multi-Select Attribut ist nun entsprechend auf seine Verwendung vorbereitet. Wir können uns nun also den Produkten zuwenden und die entsprechenden Werte setzen. Hierbei kommen wir auf die im vorherigen Schritt gemerkten Options-Ids zurück, welche zum setzen der Attribut-Werte benötigt werden. Hier ist es leider nicht möglich die konkreten Options-Werte zu setzen, sondern werden deren Ids benötigt.

Im Beispiel machen wir es uns einfach und setzen einfach alle Attribut-Optionen für das Produkt als ausgewählt:

$proxy->call($sessionId, 'catalog_product.update', array(
    'test1234',
    array(
        'multi-test'    => $optionIds
    )
));

Damit haben wir nun erfolgreich einem Produkt ein Multi Select-Attribut hinzugefügt und die entsprechenden Werte gesetzt.