Voici la suite de notre découverte de l’API Magento. Aujourd’hui je vous propose de créer -par code- une catégorie Magento.

Le concept des catégories est fondamentale de l’architecture Magento. Les catégories permettent d’organiser les produits de manière arborescente afin par exemple de structurer l’expérience visiteur sur le frontend.
Comme la création manuelle de -beaucoup de- catégories via l’interface d’administration peut s’avérer fastidieuse, il peut s’avérer trés pratique de créer les catégories par batch. Le code proposé ci-dessous aborde donc la manipulation d’une partie du modèle des catégories. Libre à vous ensuite de l’implémenter dans votre propre logique en fonction de vos besoins spécifiques.
Le code proposé ci-dessous est exécuté dans un batch PHP basé sur le modèle décris dans l’article Comment créer un batch Magento.
Je commence par créer un objet représentant ma nouvelle catégorie :
$category = new Mage_Catalog_Model_Category();
Comme toutes les entités Magento une catégorie correspond à un AttributSet spécifique. Dans la version actuelle Magento (1.3) l’AttributSet d’une catégorie est le 3. Il est tout de même préférable d’utiliser la méthode getDefaultAttributSetId() de l’objet Mage_Catalog_Model_Category en prévision d’éventuelles évolutions :
$category->setAttributeSetId( $category->getDefaultAttributeSetId() );
Pour mieux comprendre les AttributSet de Magento jeter un œil aux tables eav_attribute_set et eav_entity_type
Maintenant que j’ai une entité de catégorie toute propre il est temps d’y définir mes données métier. Pour ce faire j’opte pour un array PHP facilement manipulable que j’hydrate ensuite dans mon entité via la méthode addData() :
$data = array(); $data['is_active'] = 1; $data['display_mode'] = Mage_Catalog_Model_Category::DM_PRODUCT; $data['name'] = "Ma nouvelle catégorie"; $data['is_anchor'] = 1; // 1 pour oui et 0 pour non $category->addData($data);
Les catégories de Magento sont organisées sous forme arborescente, il est donc utile d’indiquer à notre objet où il se situe dans l’arbre.
Cette opération se fait via la méthode setPath(). L’assignation d’une catégorie enfant à un parent n’a rien de définitif, c’est une information facilement modifiable -par drag&drop- via l’interface d’administration.
Le path d’une catégorie est une chaîne listant les ID des parents depuis la racine. Exemple : 2/3/8 indique que la catégorie 8 se trouve sous la sous-catégorie 3 qui se trouve elle-même sous la catégorie racine par défaut 2. Plutôt que de manipuler les ID des catégories il est préférable de récupérer la catégorie “parent” et d’utiliser sont assesseur getPath() :
$parentCategory = Mage::getModel('catalog/category')->load(2); // 2 est la catégorie racine par défaut $category->setPath( $parentCategory->getPath() );
Nous verrons demain comment parcourir les catégories existantes sans connaître leurs ID, par leurs nom par exemple.
Il ne me reste plus qu’à enregistrer l’état de mon objet et créer ainsi une nouvelle entité dans ma base de données, hop :
try { $category->save(); echo "Catégorie créée : " . $category->getName() . " (id: " . $category->getId() . ") \n"; } catch (Exception $e) { echo "Erreur lors de la création de la catégorie : {$e->getMessage()} \n"; }
Pour vérifier le résultat il suffit de se rendre dans l’administration sur l’écran « Catalog > Manage categories ».
Maintenant vous savez créer une catégorie par code dans Magento. Plus d’excuses qui tiennent pour créer manuellement les 250 catégories de votre toute nouvelle boutique d’accessoires pour chiots.
A demain pour un nouvel épisode de notre série consacré à l’API Magento.

















[...] Nous avons vu hier comment créer une catégorie par code dans Magento. [...]
[...] de notre découverte du modèle objet Magento. Après la création d’une catégorie et la manipulation des collections d’entités Mangento voyons comment créer un produit simple [...]