Opérations CRUD sur les produits Magento

Article complété, mis à jour et testé sur Magento 1.4.1.1

Objectifs

L’acronyme CRUD pour Create, Read, Update et Delete désigne les quatre opérations basiques
relatives au stockage d’une information en base de données.

Sur la plateforme Magento, les classes modèles se chargent de ce type d’opérations et nous verrons
ici comment utiliser ces méthodes sur un produit.

Le modèle de données évolue entre les versions de Magento, les exemples ci-dessous ont été testés avec Magento 1.4

Exemples

Les portions de code suivantes peuvent être indifféremment testées dans un contrôleur, bloc, helper
ou même template de Magento.

Afin de les tester simplement, il suffit de créer le script test.php à la racine de l’installation Magento :

<?php
$compilerConfig = 'includes/config.php';
if (file_exists($compilerConfig)) {
    include($compilerConfig);
}
 
$mageFilename = 'app/Mage.php';
require_once $mageFilename;
 
Mage::app("admin"); // initialiser Magento avec le magasin Admin
 
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
 
// placer ici le code à exécuter

Exécuter le code en accédant à l’url /test.php ou en utilisant php-cli en console (ie « php test.php »).

Charger la collection des produits

// récupérer le modèle de données Product du module Mage/Catalog
$model = Mage::getModel('catalog/product');
// charger la collection de produits
$products = $model->getCollection();
// inspecter l'objet (Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection)
var_dump($products);
// parcourir les produits
foreach ($products as $product) {
    // inspecter le produit (Mage_Catalog_Model_Product)
    var_dump($product);
}

Comme nous avons pu le préciser dans le billet Manipuler les collections d’objets Magento, les produits chargés via une collection ne comportent pas tous leurs attributs.

Charger un produit

// charger un produit par son identifiant (récupéré ici dans l'url du back office admin/catalog_product/edit/id/160)
$product = Mage::getModel('catalog/product')->load(160);
// afficher son nom de trois manières différentes
echo $product->name;
echo $product->getName();
echo $product->getData('name');
// inspecter le produit
var_dump($product);

Créer un produit simple

// créer un produit simple
$product = Mage::getModel('catalog/product');
// récupérer l'id du type d'entité
$typeId = Mage::getResourceModel('catalog/product')->getTypeId();
// récupérer l'id du jeu d'attributs par défaut des produits
$setName = 'Default';
$sets = Mage::getModel('eav/entity_attribute_set')
    ->getCollection()
    ->addFieldToFilter('entity_type_id', $typeId)
    ->addFieldToFilter('attribute_set_name', $setName);
$setId = current($sets->getItems())->getId();
// préparer les attributs
$data = array(
    'entity_type_id'   => $typeId,
    'attribute_set_id' => $setId,
    'type_id'          => 'simple',
    'sku'              => 'mon nouveau produit',
    'price'            => 79.99,
    'weight'           => 0.00,
    'name'             => 'Mon nouveau produit',
    'description'      => 'Ma description',
    'short_description'=> 'Ma description courte',
    'status'           => 1,
    'tax_class_id'     => 1,
    'visibility'       => 4,
    'is_in_stock'      => 1,
    'website_ids'      => array(1)
);
// affecter les attributs au nouveau produit
$product->setData($data);
// également possible d'utiliser les setters
$product->setName("mon super produit");
$product->validate(); // valider les valeurs des attributs !
// sauver le nouveau produit (insère en base de données)
$product->save();
echo 'id du nouveau produit '.$product->getId();

Modifier un produit

// charger un produit par son identifiant
$product = Mage::getModel('catalog/product')->load(166);
// changer le nom via un setter
$product->setName('mon nouveau nom');
// sauver le produit (met à jour en base de données)
$product->save();
// changer plusieurs attributs
$data = $product->getData();
$data['weight'] = '2.5';
$data['price'] = '549.99';
$product->setData($data);
// sauver le produit (met à jour en base de données)
$product->save();

Supprimer un produit

// charger un produit par son identifiant
$product = Mage::getModel('catalog/product')->load(170);
// supprimer le produit
$product->delete();

Conclusion

Notre brève présentation des opérations CRUD sur un produit Magento est désormais terminée, notons au passage que ces méthodes sont utilisables sur tous les modèles Magento (catégories, clients, etc).

Modèle , , Permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">