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).
|