Kategorien in Magento importieren, Kategorien programmatisch erstellen

Von Haus aus bietet Magento keinen Import oder Export von Kategorien. Mit dieser kostenfreien Erweiterung ist der Import von Kategorien aus einer CSV-Datei möglich.

Doch weder diese noch andere Erweiterungen auf Connect bieten alle nötigen Freiheiten. So habe ich keine Extension gefunden, bei der die interne Nummer einer Kategorie angegeben werden kann. Dies ist wichtig, um bei einer automatischen Synchronisierung mit einem externen System bei der Zuweisung von Produkten zu einer Kategorie direkt die externen Kategorienummern zu verwenden (und sich die zusätzlichen Joins und Zuweisungstabellen zu ersparen).

Dabei ist eine programmatische Erstellung einer Kategorie in Magento recht einfach und übersichtlich:

$objCategory = Mage::getModel('catalog/category');
$objCategory->setStoreId(0);

// $entity_id = 100;
// $path = '1/3';

$aryCategory = array(
    'entity_id' => $entity_id,
    'path' => $path.'/'.$entity_id,
    'name' => 'Bezeichnung',
    'is_active' => 1,
    'include_in_menu' => 1,
    'url_key' => 'bezeichnung',
    'is_anchor'  => 0,
    'position'  => 1,
    'display_mode' => 'PRODUCTS_AND_PAGE',
    'created_at' => date("Y-m-d H:i:s", time()),
    'level' => $level = count(explode('/', $path))
);

$objCategory->addData($aryCategory);

try {
    $objCategory->save();
} catch (Exception $e) {
    print $e->getMessage();
}

Es lohnt sich, die Tabelle catalog_category_entity zu analysieren, um zu verstehen wie Magento die Kategorien auf der Datenbankebene verwaltet. Einige der Attribute, die in dem o. g. Beispiel gesetzt werden, findet man direkt in dieser Tabelle als Spalten wieder.

In einigen Quellen stellte ich fest, dass die Spalte level (Ebenentiefe) keinen Wert bekommt. Dieser wird von Magento leider nicht automatisch gesetzt! Wird die Ebenentiefe nicht angegeben, können tiefere Ebenen im Backend im Produkteditor nicht aufgeklappt werden.

Der Bau des eigenen Pfads path ist sehr komfortabel, wenn man zum Importieren von Kategorien auf verschiedenen Ebenen eine rekursive (selbst aufrufende) Funktion als Lösung wählt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.