Le panier d'achats d'ExperShop


Page Principale Table

Pour tout rapport de bug ou suggestion, envoyez un mèl au Support ExperLog


Introduction

ExperShop Lite inclut un panier d'achats: des articles peuvent y être ajoutés ou supprimés, et le contenu du panier peut être affiché dans une page DynHtml ExperShop.

Le panier d'achats intègre des fonctions de calcul de taxes et de frais de port.

Afficher le contenu du panier d'achats

Le panier d'achats est accessible depuis les modèles de page DynHtml à travers un "DataSet" prédéfini, appelé ShoppingCart.

ShoppingCart ressemble è un résultat de requête - dans la manière d'y accéder - excepté qu'aucune exécution de requête n'est nécessaire : son contenu est toujours valide.

Par exemple, vous pouvez à tout instant boucler sur le contenu du panier d'achats :

  $LoopOnResults ShoppingCart article
   Ref. article : $article:ProdId$ - Prix : $article:Price$<br>
  $EndLoop
  
Chaque ligne (article) du panier d'achats contient les informations suivantes :

  • ItemId : référence unique de l'article courant dans le panier
  • ProdId : référence article (au sens produit)
  • Name : nom de l'article
  • Price : prix unitaire calculé de l'article (0 pour les sous-articles, et la somme du PU article et des lignes sous-articles s'il y a des sous-articles).
  • Qty: quantité (nombre d'occurrences de cet article dans le panier)
  • LinePrice : prix total pour la ligne courante, soit prix unitaire multiplié par quantité (Price * Qty)
  • Superior : l'article dont cet article est un sous-article (vide si ce n'est pas un sous-article).
  • ItemPrice : prix unitaire de l'article (ne tient pas compte des sous-articles).
  • Product : un objet qui donne accès a la table produit (par défaut, "EProduct") au sens de la base de données. (chaque colonne de la table est accessible, même si vous en avez ajouté : par exemple, si vous avez défini une colonne "couleur" dans la table "EProduct", vous pourrez y accéder en tant que Product.couleur).
Le panier d'achats donne accès directement à certaines informations : par exemple, $ShoppingCart:TotalPrice$ est le prix total du contenu du panier, taxes et frais de port inclus.

Les informations suivantes sont accessibles :

  • ShoppingCart:TotalPrice : prix total, taxes et frais de port inclus.
  • ShoppingCart:BasePrice : prix total, taxes et frais de port exclus.
  • ShoppingCart:Tax : taxes.
  • ShoppingCart:ShippingCost : frais de port.
  • ShoppingCart:TaxZone : nom de zone pour les taxes.
  • ShoppingCart:ShippingZone : nom de zone pour les frais de port.
  • ShoppingCart:Discount : remise
  • ShoppingCart:PreorderId : numéro de commande interne lorsque le panier d'achat a été pré-commandé.
  • ShoppingCart:SubTotal : sous-total (évolue au fur et à mesure que l'on boucle sur les articles).
  • ShoppingCart:ItemCount : nombre total d'articles.
  • ShoppingCart:ItemIndex : numéro d'ordre de l'article courant (entier positif) lorsqu'on boucle sur les articles.

Ajouter / Supprimer des articles

Les actions suivantes peuvent affecter le contenu du panier d'achats :
  • com.expershop.actions.ESAddToCart (ajouter un article)
  • com.expershop.actions.ESUpdateCart (mettre à jour le panier)
  • com.expershop.actions.ESEmptyCart (vider le panier)
  • com.expershop.actions.ESSaveCart/ESRestoreCart (sauver / restaurer le panier)
Ces actions, ainsi que leurs paramètres, sont détaillées dans la documentation des actions ExperShop.

Pour supprimer un article du panier, utilisez l'action ESUpdateCart (soit en spécifiant un paramètre DEL_[ItemId] égal à "y" comme "yes", soit en mettant la quantité (QTY_[ItemId]) à "0").

Gestion des produits avec options (couleurs, tailles...)

Lorsque vous ajoutez un article au panier d'achats (avec l'action ESAddToCart), vous pouvez définir des paramètres supplémentaires pour gérer des options produit :

OptionNames est la liste des noms d'options (séparés par des virgules): par example,

  <input type="hidden" name="OptionNames" value="Couleur,Taille">
  
Pour chaque option, vous devez définir un paramètre - généralement via un "contrôle" dans une "form" de saisie (le nom du paramètre est le nom de l'option, sa valeur est la valeur de l'option). Par exemple :
  <select size="1" name="Couleur">
  <option>Rouge
  <option>Bleu
  </select>
  <select size="1" name="Taille">
  <option>10
  <option>20
  </select>
  
Lorsque la "form" HTML sera validée, l'article sera ajouté au panier avec les options positionnées selon le choix de l'utilisateur.

Dans la page qui affiche le contenu du panier, vous pouvez accéder aux valeurs des options comme suit :

  $LoopOnResults ShoppingCart art
   Nom=$art:Name$, Couleur=$art:Options.Couleur$, Taille=$art:Options.Taille$
   <br>
  $EndLoop
  
Remarque: du côté de l'administration boutique, les options pourront être affichées d'une manière comparable (en bouclant sur les articles de la commande), ou directement en tant que $article:Options$ (qui affichera une chaîne de caractères de la forme { Couleur=Bleu, Taille=10 } - suffisante pour être comprise de l'utilisateur).

Stocker des informations utilisateur dans le panier

Le panier peut conserver en mémoire des informations utilisateur : elles seront conservées aussi longtemps que le panier ne sera pas vidé.

Pour stocker des information utilisateur dans le panier, utilisez les actions ESUpdateCart ou ESAddToCart, avec des paramètres de la forme UINFO_[nom].
Par exemple, dans une "form" HTML qui déclenche l'action ESUpdateCart :

  <input type=text name="UINFO_Prenom">
  
provoquera le stockage d'une information appelée "Prenom" dans le panier au moment où la "form" HTML sera validée.

Pour accéder à des informations utilisateur préalablement stockées, utilisez $ShoppingCart:UInfo.$.
Par exemple, pour accéder à l'information "Prenom" définie dans le paragraphe précédent :

  Votre prénom est : $ShoppingCart:UInfo.Prenom$
  

Calcul des taxes et des frais de port

Les taxes et les frais de port sont calculés en fonction de "zones", définies dans le fichier de configuration de la boutique.
Les zones définissent la manière dont les taxes et les frais de port sont calculés.

Il est possible de modifier dynamiquement les zones taxe et frais de port du panier, en utilisant l'action com.expershop.actions.ESUpdateCart.
Le comportement par défaut des zones taxe et frais de port peut également être défini.

Différents algorithmes de calcul des frais de port peuvent être utilisés :

  • Tarif unique (FLAT)
  • Tarif basé sur le poids (WEIGHT ou WEIGHT_TABLE)
  • Tarif basé sur le nombre d'articles - quantité totale (QTY)
  • Tarif basé sur le nombre d'articles différents (ITEMCOUNT)
  • Tarif basé sur le prix total (PRICE)
Pour les taxes, un taux de TVA (Taxe sur la Valeur Ajoutée) peut être défini.

Exemple : deux zones de frais de port

Par exemple, nous pouvons définir une zone "Magasin" pour les clients qui viennent prendre livraison de leur commande sur place (avec des frais de port gratuits), et une zone "Maison" pour ceux qui veulent être livrés chez eux (avec un frais de port constant, par exemple 10 Euros).

Pour cela, il faudra inclure les informations suivantes dans le fichier de configuration boutique:

  #Zone Magasin (gratuite)
  shop.shippingcost.DriveIn.rate: 0
  shop.shippingcost.DriveIn.type: FLAT

  #Zone Maison (10 Euros)
  shop.shippingcost.Home.rate: 10
  shop.shippingcost.Home.type: FLAT

  #La zone par defaut: Maison
  shop.shippingcost.defaultzone: Maison
  
Dans l'exemple ci-dessus, les frais de port seront de 10 Euros par défaut, sauf si le client choisit l'option "Magasin".

Remarque: les tarifs sont génréalement des nombres, mais il est aussi possible de définir des intervalles: par exemple,

  shop.shippingcost.Maison.type: PRICE
  shop.shippingcost.Maison.rate: [0,100[=10;[100,+[=2;
  
signifie que les frais de port pour la zone "Maison" sont de 10 Euros pour 0 <= total des achats < 100 Euros, et 2 Euros si total des achats >= 100 Euros.

Calcul des achats en fonction d'une table de poids ("Weight") dans la base de données

Vous pouvez définir des frais de port, basés sur le poids des articles, et stockés dans une table de la base de donneés: la table contiendra des intervalles de poids, et les tarifs correspondants, par zone de livraison (ainsi qu'une colonne "Rate", représentant par exemple un taux de change à appliquer au résultat, et qu'il est recommandé d'initialiser par défaut à 1).
Par exemple, nous allons définir une zone (USA), avec deux modes de livraison (Normal et Express), chaque couple Zone/Mode ayant 3 tarifs définis par intervalles de poids (0-2 kg, 2-10kg, 10-1000kg). D'abord, il faut définir la zone dans le fichier de configuration :

  shop.shippingcost.defaultzone: USA
  shop.shippingcost.defaultmode: Normal

  shop.shippingcost.USA_Normal.type: weight_table
  shop.shippingcost.USA_Express.type: weight_table
  
Ensuite, il faut créer dans la base de données une table, nommée EShippingCost. Cette table doit inclure les colonnes suivantes :
  • Zone : nom complet de la zone (combinaison Zone/Mode, séparés par un "_"; format : [nom-de-zone]_[nom-de-mode]).
  • MinWeight : Poids minimal pour l'intervalle (inclus)
  • MaxWeight : Poids maximal pour l'intervalle (exclus)
  • Price : le coût des frais de port.
  • Rate : un taux de conversion (défaut 1) à appliquer au résultat (par exemple, un taux de change)
Dans le cas de notre exemple, la table sera définie comme suit (exemple en syntaxe PostgreSQL) :

  create table EShippingCost (
    Zone varchar(32),
    MinWeight float4,
    MaxWeight float4,
    Price float4,
    Rate float4 default 1
  );

  insert into EShippingCost values('USA_Normal', 0, 2, 3.00, 1);
  insert into EShippingCost values('USA_Normal', 2, 10, 5.00, 1);
  insert into EShippingCost values('USA_Normal', 10, 1000, 8.00, 1);
  insert into EShippingCost values('USA_Express', 0, 2, 10.00, 1);
  insert into EShippingCost values('USA_Express', 2, 10, 15.00, 1);
  insert into EShippingCost values('USA_Express', 10, 1000, 20.00, 1);

  
Ensuite, il suffit de remplir la table : vous pouvez soit le faire directement (en écrivant des requêtes SQL INSERT comme ci-dessus, ou en utilisant un outil graphique associé à la base), ou utiliser le chargeur ExperSHOP, comme suit :

Créez un fichier texte qui contient les valeurs suivantes :

  $TABLE EShippingCost
  $COLUMN Zone
  $COLUMN MinWeight N
  $COLUMN MaxWeight N
  $COLUMN Price N
  $SEPARATORS ;
  $POSTFIX ;
  $BEGINDATA
  USA_Normal;0;2;3.00
  USA_Normal;2;10;5.00
  USA_Normal;10;1000;8.00
  USA_Express;0;2;10.00
  USA_Express;2;10;15.00
  USA_Express;10;1000;20.00
  $ENDDATA
  
Cela signifie :

Zone Poids (kg) Normal Express
USA [0,2[ 3 10
USA [2,10[ 5 15
USA [10,1000[ 8 20

Lancez le chargeur :

java com.expershop.bulk.Loader fichiertexte

Cette commande va générer les commandes SQL INSERT nécessaires pour remplir votre table : sauvegardez les dans un fichier, et exécutez-le en tant que script SQL pour charger votre base.

Remises

Des remises (discounts) peuvent être associées à des codes remise, définis dans le fichier de configuration de l'application. Une remise peut être proporionnelle au prix total (choix par défaut), ou au nombre total d'articles, ou ancore constante (ex. 1 Euro de remise fixe).

Par exemple, 2 codes remise (une remise "gold" de 10%, et une remise "silver" de 5%) peuvent être définies comme suit :

  # Remise "gold", 10 %
  shop.discount.goldclub.rate: 0.10
  shop.discount.goldclub.type: price
  # Remise "silver", 5 %
  shop.discount.silverclub.rate: 0.05
  shop.discount.silverclub.type: price
Dans l'exemple ci-dessus, les codes remise tapés par le client pour obtenir sa remise seront soit "goldclub", soit "silverclub".

Le code remise est passé en paramètre à l'action com.expershop.actions.ESUpdateCart (le paramètre s'appelle DiscountCode). Exemple:

 <form method="post" action="com.expershop.lite.ExperSHOP">
 Tapez votre code remise ici :
 $Cookie
 <input type="hidden" name="Page" value="panier.tmpl">
 <input type="hidden" name="Action" value="com.expershop.actions.ESUpdateCart">
 <input type="text" name="DiscountCode" length="12">
 <input type="submit" value="Ok">
 </form>
Ensuite, la remise peut être affichée, par exemple ainsi :
  $IfGt ShoppingCart:Discount 0
   Votre remise : $(.00)ShoppingCart:Discount$
  $Endif

Utiliser une table produit autre que EProduct

Ceci est une fonction avancée : le panier d'achats d'ExperShop peut utiliser une autre table que EProduct comme table de référence pour les produits dans la base de données.

Par exemple, vous pourriez souhaiter utiliser la table suivante :

  create table Produit (
   Refprod varchar(32),
   Nom varchar(128),
   Prix number
  );
Une table produit doit comporter au moins 3 colonnes: une référence produit (identifiant unique), un nom de produit, et un prix.
Dans l'exemple ci-dessus, Refprod est la référence produit, Nom le nom de produit, et Prix le prix.

Deux étapes sont nécessaires pour ajouter un tel produit au panier d'achats :

  • Configurer le panier d'achats, en utilisant l'action com.expershop.actions.ESConfigureCart - pour dire au panier quelle table et quelles colonnes utiliser.
  • Ajouter le produit au panier, normalement - par exemple, avec l'action com.expershop.actions.ESAddToCart.
Etape 1: configurer le panier d'achats

Par exemple, voici le code pour configurer le panier comme décrit ci-dessus :

  $Assign CONFIG_Table Produit
  $Assign CONFIG_ProdId Refprod
  $Assign CONFIG_Name Nom
  $Assign CONFIG_Price Prix
  $Action com.expershop.actions.ESConfigureCart
  
Pour revenir à la configuration par défaut, il suffit d'invoquer l'action com.expershop.actions.ESConfigureCart sans paramètre.

Etape 2: ajouter un article au panier d'achats

Si vous utilisez l'action com.expershop.actions.ESAddToCart : rien ne change, le paramètre "ProdId" de l'action représente maintenant "Refprod" (c'est transparent pour le programmeur, le nom des paramètres de l'action ne change pas).