Donner un accès direct au tunnel d'achat avec Drupal Commerce

Argent sur une table

Donner un accès direct au tunnel d'achat de votre site e-commerce au moyen d'un lien peut s'avérer nécessaire lorsque vous souhaitez diffusez des informations sur les produits de votre boutique en ligne sur d'autres supports comme une newsletter par exemple, ou encore un site internet partenaire ou satellite.

Le module Commerce Express Checkout peut répondre à ce type de besoin. Mais si vous souhaitez disposer d'url plus conviviales, user-friendly comme on dit, ce module n'est pas forcément très adapté. En effet, ce module vous permet de passer l'étape Panier pour rediriger automatiquement votre visiteur vers votre tunnel d'achat. Mais si vous souhaitez conserver le système de panier sur votre site e-commerce ? Ce module vous permet de générer également des url pour chaque produit présents sur votre site. Vous pouvez ainsi conserver le système du panier et générer des url d'accès direct à votre tunnel d'achat pour certains produits. Mais outre que les url générés par Commerce Checkout Express sont assez peu conviviales ni mnémotechniques (elles contiennent un token aléatoire), cela peut s'avérer fastidieux sur le long terme de générer pour chaque produit disponible dans votre catalogue une url d'accès direct au tunnel d'achat.

Et si nous pouvions donner un accès au tunnel d'achat pour chacun des produits depuis une adresse simple, conviviale et reproductible ?

L'idée est donc de construire un lien à partir du SKU d'un produit (identification unique du produit) pour donner un accès au tunnel d'achat avec le produit déjà dans le panier. Nous allons créer un module intitulé MYMODULE et implémenter hook_menu() pour créer un lien personnalisé.

 /**
* Implements hook_menu().
*/
function MYMODULE_menu() {

  $items['myawesome/link/%'] = array(
    'title' => t('Add to cart'),
    'page callback' => 'MYMODULE_checkout_direct',
    'page arguments' => array(2),
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  );
  return $items;
} 

Le lien construit est donc de la forme myawesome/link/% où la variable % sera remplacé par le SKU du produit. A chaque accès à ce lien, la fonction MYMODULE_checkout_direct sera appelée et utilisera comme paramètre le SKU fourni dans le lien.

Ecrivons la fonction qui va ajouter automatiquement le produit dans le panier et rediriger le visiteur vers le tunnel d'achat.

 /**
* Add items to the user cart
*/
function MYMODULE_checkout_direct($sku, $quantity = 1) {
  global $user;
  if ($product = commerce_product_load_by_sku($sku)) {
    $line_item = commerce_product_line_item_new($product, $quantity);
    $line_item = commerce_cart_product_add($user->uid, $line_item, FALSE);
    drupal_goto('checkout');
  }
  else {
    drupal_goto('other/link');
  }
} 

Cette fonction va récupérer le produit depuis son SKU fourni en paramètre, l'ajouter au panier puis rediriger le visiteur vers le tunnel d'achat. Il est possible de rajouter un deuxième paramètre au lien pour fournir automatiquement la quantité à ajouter au panier.

Nous disposons ainsi, avec quelques lignes de code, d'une url personnalisée et reproductible pour donner un accès direct au tunnel d'achat. Nous pouvons alors utiliser ces adresses sur tout support externe, comme une newsletter, ou encore proposer sur la page de chacun des produits, en même temps que le panier, un lien de type Achat express.

Vous disposez d'autres astuces pour Drupal Commerce ? N'hésitez pas à nous les partager dans les commentaires.

Commentaires

Ajouter un commentaire