Terminons notre semaine de découverte du code Magento en abordant une fonctionnalité bien pratique : les prix tiers (« tiers prices » en V.O.).

Les prix tiers sont des prix « conditionnés ». Un produit a au minimum un prix -fixe- et éventuellement un prix spécial pour une durée déterminée ou non. Les prix tiers permettent de définir des prix spécifiques à une quantité achetée et / ou à un groupe d’acheteur.
Ce qui permet -par exemple- de proposer un catalogue dédié aux professionnels avec des prix minorés ou d’inciter à l’achat avec une politique de prix dégressifs sur la quantité.
Le code proposé ci-dessous est exécuté dans un batch PHP basé sur le modèle décrit dans l’article Comment créer un batch Magento.
Commençons par voir comment ajouter un prix tiers à un produit qui n’en a aucun.
Un prix tiers est défini sous la forme d’un array PHP contenant au minimum les 4 clés suivantes :
$tierPrice = array( 'website' => 'all', // ou l'ID du site 'customer_group_id' => 2, // ou 'all' 'qty' => 20, // obligatoire et non null, 1 = pour ne pas gérer les quantités 'price' => 19.99, );
C’est la méthode update de la classe Mage_Catalog_Model_Product_Attribute_Tierprice_Api qui va se charger de mettre à jour les prix tiers de notre produit, la méthode attend un tableau de 1 à n prix tiers :
$tierPrices[] = $tierPrice;
Les données sont prêtes, ajoutons les à notre produit ID:738 :
try { $api = new Mage_Catalog_Model_Product_Attribute_Tierprice_Api(); $api->update( 738 , $tierPrices ); } catch (Exception $ex) { echo "Erreur lors de la création des prix tiers : {$e->getMessage()} \n"; }
Vérification sur l’admin : le prix tiers est bien présent dans notre produit.

Ajouter des prix tiers c’est bien. Mais bien souvent, on a besoin de modifier ceux d’un produit existant. Rien de plus simple, il suffit de récupérer le array PHP des prix d’un produit :
$api = new Mage_Catalog_Model_Product_Attribute_Tierprice_Api(); $tiersPrices = $api->info( 738 ); // mon produit ID:738 var_dump($tiersPrices) ;
… qui nous donne :
array(1) {
[0]=>
array(4) {
["customer_group_id"]=>
int(1) "2"
["website"]=>
string(3) "all"
["qty"]=>
string(7) "20.0000"
["price"]=>
string(7) "19.9900"
}
}
Puis de modifier le prix tiers existant, voir en ajouter un autre :
$tiersPrices[0]['customer_group_id'] = 'all'; $tiersPrices[] = array( 'website' => 'all', 'customer_group_id' => 'all', 'qty' => 50, 'price' => 14.99, );
Et hop rebelote :
$api->update( 738 , $tiersPrices );
Mes prix tiers sont à jour :

Et de ce côté-là, la documentation officielle ne nous aide pas beaucoup. Heureusement le code “core” est bien construit et suffisamment lisible pour retrouver ses petits et comprendre comment « eux » ils font.
A bientôt.
















