Magento – Ajouter, modifier et supprimer une option personnalisable en code

Pour faire evoluer notre catalogue produit nous avons dû mettre en place des scripts effectuant de grosses manipulations sur les options personnalisables des produits (custom option). Plutôt que d’effectuer ces manipulations dans les tables catalog_product_optionxxxx, j’ai préférer me pencher sur l’utilisation des objets du modèle.

Ayant déjà une bonne connaissance de la manipulation de la partie product et category, la manipulation des options devrait être assez simple. Après un peu de recherche sur Internet, j’ai du batailler ferme avec le script pour arriver à mes fins car c’est plus complexe qu’il n’y parait…

Voici quelques exemples de manipulation :

 Chargement de la liste des options d’un produit

A partir d’un id produit on charge le model et on retourne la liste des options pour pouvoir la parcourir :

$produit = Mage::getModel('catalog/product');
$produit->load($item->getId());
echo "        Chargement produit : ".$item->getId()."\r\n";
$options = $produit->getProductOptionsCollection();
if (isset($options)) {
    foreach ($options as $o) {
      // Parcours des options du produit
    }
}

Accéder aux valeurs de l’option et ajout de nouvelles

L’objectif est de pouvoir accéder aux valeurs de l’option utilisée sous forme de liste déroulante (prix, titre, sku) ….

Dans l’exemple suivant nous parcourons les valeurs de l’option pour récupérer le prix de la valeur ‘Contrecollage’. Ensuite nous créeons en dessous une nouvelle valeur en ajoutant 10 € au prix de la la valeur d’option Contrecollage.

if ($title == "Le titre de l'option recherchée"){
   $values2 = $o->getValuesCollection();
   foreach ($values2 as $k => $v) { 
      // Test des valeurs existantes pour créer une nouvelle en utilisant le prix
      echo "                  ++++  : " . $v->getTitle() ."\r\n";
      if (strpos($v->getTitle(),'Contrecollage') !== false) {
         echo "                  ++++ ajout : " . $title ."\r\n";
         $value = Mage::getModel('catalog/product_option_value');
         $value->setOption($o)
              ->setTitle('Impression Vinyle Contrecollé - Plastification Brillante')
              ->setSku("plastifbrillante")
              ->setPriceType("fixed")
              ->setPrice(floatval($v->getPrice()+10)) 
      // On ajoute 10 € pour cette option par rapport à la plastification brillante
              ->setOptionId($o->getId());
         $value->save();
 }

Supprimer complétement une option personnalisable

Pour supprimer complétement une option d’un produit, il faut également supprimer chacune des valeurs :

if ($title == 'Option recherchée'){
  Mage::getModel('catalog/product_option')
    ->load($o->getData('option_id'), 'option_id')
    ->delete()
    ->save();
  $values = $o->getValuesCollection();
  foreach ($values as $val) {
    $val->delete()->save();
  }
}

A partir de ces exemples  il est possible de faire toutes les opérations possibles sur les options personnalisables des produits dans Magento.

Magento – Ajouter, modifier et supprimer une option personnalisable en code

Tagged in:, ,

2 Comments

  1. lallouch

    3 novembre 2013 - 9 h 29 min
    Reply

    Bonjour,
    je suis entrain de devlopper un site d’impression comme easyflyer pour le maroc, pourriez vous me donner qlq conseil

    merci

Leave a Reply

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.