Introduction
Si vous souhaitez poser une question, utilisez le sujet suivant : http://www.magentocommerce.com/boards/viewthread/38223/
La syntaxe de configuration est une syntaxe proche de la syntaxe JSON.
Exemple :
{
label: "National",
destination: "AD,FR,MC",
conditions: "{cart.price_excluding_tax}<1000.00",
fees: "1.30 + {table {cart.weight} in 0.5:5.30, 1.0:6.50, 2.0:7.40, 3.0:8.30, 5.0:10.10}",
}
Le caractère `#` en début de ligne indique un commentaire.
Un élément de configuration débute par le caractère `{` et se termine par `}`.
Un élément de configuration contient plusieurs propriétés associées à des valeurs.
Les propriétés sont alphanumériques (a-z0-9_), le séparateur propriété/valeur est le caractère `:`, les valeurs sont numériques, booléennes ou des chaînes de caractères délimitées par des guillemets. En fin de ligne, une virgule sert de séparateur entre les différentes propriétés.
Liste des propriétés :
- label: nom (libellé)
- description: description (visible seulement si le template l'affiche)
- code: code de la méthode de livraison (facultatif mais s'il est spécifié il doit être unique)
- enabled: bloc de configuration activé ou non (ex: true ou false)
- fees: frais de port (ex: "15.00" ou "{table {cart.weight} in 0.5:5.30, 1.0:6.50}" ou "100 * {cart.weight}")
- conditions: conditions d'activation (ex: "{cart.weight}>=1.0" ou "{cart.price_excluding_tax}<100.00" ou "({cart.weight}<=1.0) and ({cart.weight}>3.0) and {free_shipping}" ou "{count products where product.attribute.color=='Bleu'}>1 or {count products where product.option.size=='2m'}>2")
- destination: pays (éventuellement régions) autorisés en destination (ex: "FR,DE,US" ou "FR(2A,2B,25000)" ou "FR-(2A,2B)" ou "FR(01,02,39600),CH,DE")
- origin: pays (éventuellement régions) autorisés en origine (ex: "FR,DE,US" ou "FR(2A,2B,25000)" ou "FR-(2A,2B)" ou "FR(01,02,39600),CH,DE")
- customer_groups: groupes de client autorisés (ex: "NOT LOGGED IN,Retailer" ou "0,3")
Le libellé : `label`
Il s'agit du nom qui sera donné à la méthode de livraison.
On peut insérer certains éléments comme le poids des marchandises dans le libellé.
Pour ce faire, utiliser les variables suivantes :
- {destination.country.name}: le pays de destination
- {destination.country.code}: le code du pays de destination
- {destination.region.code}: le code de la région de destination
- {destination.postcode}: le code postal de destination
- {origin.country.name}: le pays d'envoi
- {origin.country.code}: le code du pays d'envoi
- {origin.region.code}: le code de la région d'envoi
- {origin.postcode}: le code postal d'envoi
- {cart.weight}: poids des marchandises
- {cart.weight.unit}: l'unité de poids
- {cart.quantity}: la quantité d'articles
- {cart.price_including_tax}: prix TTC
- {cart.price_excluding_tax}: prix HT
- {store.code}: code du magasin
- {store.name}: nom du magasin
- {store.address}: adresse du magasin
- {store.phone}: téléphone du magasin
- {date.timestamp}: timestamp UNIX de la date actuelle
- {date.year}: année de la date actuelle
- {date.month}: mois de la date actuelle
- {date.day}: jour de la date actuelle
- {date.hour}: heure de la date actuelle
- {date.minute}: minute de la date actuelle
- {date.second}: seconde de la date actuelle
label: "Colissimo ({cart.weight} / {destination.country.name})",
La ligne ci-dessus affichera par exemple "Colissimo (3.0kg / France)".
Les frais de port : `fees`
La propriété `fees` se spécifie sous la forme d'une formule (voir l'initiation aux formules).
fees: 10.00,
fees: "{table {cart.weight} in 0.5:5.30, 1.0:6.50}",
fees: "0.1 * {cart.price_excluding_tax} + 10.00",
fees: "0.1 * {cart.price_excluding_tax} + {table {cart.weight} in 0.5:5.30, 1.0:6.50} + 10.00",
Initiation aux formules
Les propriétés `fees` et `conditions` sont spécifiées sous la forme de formules.
Signes mathématiques disponibles :
- opérateurs : *, /, + et -
- modulo : %
- parenthèses : ( et )
- les opérateurs booléens &&, and, ||, or, ==, <, >, <=, >=
- les opérateurs binaires & et |
- le groupe d'opérateur C ? X : Y (ex: "{cart.price_exluding_tax}>100 ? 15*{cart.weight} : 20*{cart.weight}")
Fonctions disponibles :
- arrondis : round(x), floor(x), ceil(x)
- valeur absolue : abs(x)
- maximum : max(x,y)
- minimum : min(x,y)
- entier aléatoire : rand(min,max)
- puissance : pow(x,puissance)
- nombre PI : pi()
- racine carrée : sqrt(x)
- logarithme : log(x) pour le logarithme népérien ou log(x,base)
- exponentiel : exp(x)
Possibilité d'utiliser les fonctionnalités avancées suivantes : casting en entier (int) ou en nombre flottant (float),
comparaison avec la valeur null ou les valeurs booléennes true et false.
Variables disponibles :
- {cart.weight}: poids du colis
- {cart.price_including_tax}: prix TTC
- {cart.price_excluding_tax}: prix HT
- {cart.quantity}: nombre d'articles dans le panier
- {date.timestamp}: timestamp UNIX de la date actuelle
- {date.year}: année de la date actuelle
- {date.month}: mois de la date actuelle
- {date.day}: jour de la date actuelle
- {date.hour}: heure de la date actuelle
- {date.minute}: minute de la date actuelle
- {date.second}: seconde de la date actuelle
- {free_shipping}: frais de port offert (par une règle dans Magento) [true/false]
Vous avez la possibilité de mettre des espaces et des retours à la ligne dans les formules (pour aérer).
Vous pouvez également utiliser des fonctionnalités avancées telles que les tables de tarifs, la copie d'une propriété d'une autre méthode,
les fonctions spéciales, l'utilisation des attributs et des options des produits ou encore l'utilisation des variables personnalisées.
Utilisation des tables de tarifs
Dans une table, on peut inclure ou exclure une valeur limite avec les caractères '[' et ']' :
fees: "{table {cart.weight} in 1.0]:5.00}",
fees: "{table {cart.weight} in 1.0[:5.00}",
Dans une table, on doit spécifier la valeur de référence. Pour cela, on peut utiliser une des variables disponibles.
Vous pouvez aussi utiliser une formule afin de définir une autre variable de référence.
fees: "{table {cart.weight} in 0.5:5.30, 1.0:6.50}",
fees: "{table {cart.quantity} in 10:5.30, 20:6.50}",
fees: "{table {cart.price_including_tax} in 15.00:5.30, 30.00:6.50}",
fees: "{table {cart.price_excluding_tax} in 15.00:5.30, 30.00:6.50}",
fees: "{table ceil({cart.weight}/10) in 1:5.30, 2:6.50}",
Faire une copie d'une propriété d'une autre méthode
Il est possible de faire une copie d'une propriété dans une autre à l'aide de la syntaxe ci-dessous.
Vous pouvez utiliser cette technique dans les propriétés 'conditions', 'fees',
'enabled', 'label', 'description', 'destination', 'origin', 'customer_groups' et 'tracking_url'
mais pas dans la propriété 'code'.
{
code: "colissimo",
label: "Colissimo",
destination: "AD,FR,MC",
conditions: "{cart.price_excluding_tax}<1000.00",
fees: "1.30 + {table {cart.weight} in 0.5:5.30, 1.0:6.50, 2.0:7.40, 3.0:8.30, 5.0:10.10}",
}
...
conditions: "({colissimo.conditions}) and ({cart.weight}>10.0)",
...
fees: "({colissimo.fees}) + 15.00",
...
Fonctions spéciales dans les formules
Vous pouvez utiliser dans les formules des fonctions spéciales.
Liste des fonctions spéciales :
- min(x,y) : calcule le minimum entre plusieurs valeurs (éventuellement plus de deux valeurs). Si l'une des valeurs est nulle, elle est ignorée.
- max(x,y) : calcule le maximum entre plusieurs valeurs (éventuellement plus de deux valeurs). Si l'une des valeurs est nulle, elle est ignorée.
{
code: "courrier_suivi",
label: "Courrier suivi",
destination: "FR",
conditions: "{cart.price_including_tax}<80",
fees: "{table {cart.weight} in 0.050:2.21, 0.100:2.77, 0.500:4.60}",
}
{
code: "courrier_suivi_offert",
label: "Frais de port offerts - Courrier suivi",
destination: "{courrier_suivi.destination}",
conditions: "{cart.price_including_tax}>=80 and {cart.weight}<=0.500",
fees: 0.00,
}
{
code: "lettre_recommandee",
label: "Lettre Recommandée",
destination: "FR",
conditions: "{cart.price_including_tax}<80",
fees: "{TABLE {cart.weight} IN 0.050:4.3,0.100:4.75,0.250:5.62,0.500:6.42,1.000:7.32,2.000:8.56,10.000:10.30}",
}
{
code: "lettre_recommandee_offert",
label: "Frais de port offerts - Lettre Recommandée",
destination: "{lettre_recommandee.destination}",
conditions: "{cart.price_including_tax}>=80 and {cart.weight}>0.500 and {cart.weight}<=10.000",
fees: 0.00,
}
{
code: "supplement_lettre_recommandee",
label: "Supplément Lettre Recommandée",
destination: "{lettre_recommandee.destination}",
conditions: "{courrier_suivi_offert.conditions}",
fees: "{lettre_recommandee.fees} - {courrier_suivi.fees}",
}
{
code: "colissimo",
label: "Colissimo",
destination: "FR",
conditions: "{cart.price_including_tax}<80",
fees: "{table {cart.weight} in 0.3:8.7,0.8:9.9,1.8:10.85,2.8:11.8,4.8:13.7,6.8:15.6,9.8:18.45,14.8:20.45,29.8:26.45}",
}
{
code: "colissimo_offert",
label: "Frais de port offerts - Colissimo",
destination: "{colissimo.destination}",
conditions: "{cart.price_including_tax}>=80 and {cart.weight}>10 and {cart.weight}<=29.8",
fees: 0.00,
}
{
code: "supplement_colissimo",
label: "Supplément Colissimo",
destination: "{colissimo.destination}",
conditions: "{courrier_suivi_offert.conditions} or {lettre_recommandee_offert.conditions}",
fees: "{colissimo.fees} - min({courrier_suivi.fees},{lettre_recommandee.fees})",
}
{
code: "chronopost",
label: "Chronopost",
destination: "FR",
conditions: "{cart.price_including_tax}<80",
fees: "{TABLE {cart.weight} IN 1:13.29, 2:13.99, 3:18.4, 4:19.24, 5:20.08, 6:20.92, 7:21.76, 8:22.6, 9:23.44, 10:24.28, 15:28.48, 20:32.68, 25:36.88, 30:41.08}",
}
{
code: "chronopost_offert",
label: "Frais de port offerts - Chronopost",
destination: "FR",
conditions: "{cart.price_including_tax}<80 and {cart.weight}>29.8 and {cart.weight}<=30",
fees: 0.00,
}
{
code: "supplement_chronopost",
label: "Supplément Chronopost",
destination: "{chronopost.destination}",
conditions: "{courrier_suivi_offert.conditions} or {lettre_recommandee_offert.conditions} or {colissimo_offert.conditions}",
fees: "{chronopost.fees} - min({courrier_suivi.fees},{lettre_recommandee.fees},{colissimo.fees})",
}
Utilisation des attributs ou des options des produits
Il est possible d'utiliser les attributs ou les options des produits à l'aide de la syntaxe ci-dessous.
Vous pouvez utiliser cette technique dans les propriétés 'conditions' et 'fees'.
conditions: "{count products where product.attribute.color=='Bleu'}>0",
...
conditions: "{count products where product.option.size>='1'}=={cart.quantity}",
...
conditions: "{count distinct product.attribute.sku}",
...
conditions: "{sum product.option.size}>30",
...
conditions: "{count products where product.stock.is_in_stock==true}",
...
Liste des préfixes possibles :
- count : nombre (toujours suivi de 'products')
- count distinct : nombre distinct (toujours suivi d'une propriété)
- sum : somme (toujours suivi d'une propriété)
Liste des propriétés possibles :
- product.attribute.* : attribut
Liste d'attributs intéressants :
- sku : la référence
- name : le nom
- weight : le poids
- price : le prix (tel qu'il a été saisi sur la fiche du produit)
- special_price : le prix promotionnel (tel qu'il a été saisi sur la fiche du produit)
- product.option.* : option
- product.stock.is_in_stock : disponibilité du produit
- product.stock.quantity : stock du produit
Il est possible de spécifier des conditions que doivent remplir les produits pour être pris en compte. Pour cela, il suffit d'ajouter where suivi d'une formule.
Si la propriété est de type Oui/Non, vous devez utiliser les valeurs true/false ou 1/0 sans les guillemets.
conditions: "{count products where product.attribute.colissimo_allowed==1}",
conditions: "{count products where product.attribute.colissimo_allowed==true}",
Si la propriété est de type Liste de sélection et que vous souhaitez faire une comparaison avec l'id plutôt qu'avec la valeur, vous devez utiliser la syntaxe suivante :
conditions: "{count products where product.attribute.color.id==1}",
Utilisation des boucles foreach
Les boucles foreach permettent d'effectuer un calcul sur des groupes de produits plutôt que de tenir compte de tous les produits du panier.
Le résultat global d'une boucle foreach est la somme des résultats de chaque passage dans la boucle.
A l'intérieur d'une boucle foreach, il est possible d'utiliser de nouvelles variables :
- {selection.weight}: poids de la sélection
- {selection.quantity}: nombre d'articles dans la sélection
Lorsque la sélection se fait sur le sku, chaque sélection est composée d'un seul article. On peut donc utiliser d'autres variables :
- {product.weight}: poids de l'article sélectionné
- {product.quantity}: quantité de l'article sélectionné
- {product.attribute.*}: attribut de l'article sélectionné
- {product.option.*}: option de l'article sélectionné
fees: "{foreach product.attribute.code_origin}{table {selection.weight} in 0.0:0.00, 1.0:11.00, 3.0:12.00, 5.0:13.00}{/foreach}",
fees: "{foreach product.attribute.sku}{product.attribute.shipping}*{product.quantity}{/foreach}",
Utilisation des variables personnalisées de Magento (Custom Variables)
Depuis la version 1.4.0.1 de Magento, il est possible de définir des variables personnalisées.
La version 2.2.7 d'Owebia Shipping vous permet d'utiliser ces variables personnalisées grâce à la syntaxe suivante :
fees: "{customvar.my_var}*5.00",
...
fees: "{{customVar code=my_var}}*5.00",
...
Les conditions : `conditions`
La propriété `conditions` se spécifie sous la forme d'une formule (voir l'initiation aux formules)
qui doit retourner une valeur booléenne (true ou false).
conditions: "{cart.price_including_tax}<=70",
conditions: "{cart.price_excluding_tax}<=70",
conditions: "({cart.price_excluding_tax} > 20) and ({cart.price_excluding_tax} <= 70)",
conditions: "({cart.price_excluding_tax} >= 10) and ({cart.price_excluding_tax} < 50)",
conditions: "({cart.weight} > 0.5) and ({cart.weight} <= 3.0)",
conditions: "({cart.weight} >= 1.0) and ({cart.weight} < 5.0)",
conditions: "{free_shipping}",
conditions: "!{free_shipping}",
conditions: "{count products where product.attribute.color=='Bleu'}>1",
conditions: "{count products where product.option.size>='1'}=={cart.quantity}",
La destination : `destination`
Les codes pays utilisés sont ceux de Magento (à priori ils sont les mêmes que les codes ISO 3166-1 alpha-2).
Il est possible de spécifier les codes régions ou les codes postaux que l'on veut filtrer ou exclure.
destination: "FR,BE",
destination: "FR-(2A,2B)",
destination: "FR(2A,2B)",
destination: "* - ( DE, FR(2A,2B) )",
Astuce
Dans l'éditeur, vous pouvez utiliser les code pays mais aussi les noms des pays ainsi que des raccourcis pour insérer des groupes de pays.
- UE ou Union Européenne : ajoute les pays de l'Union Européenne.
- DOM : ajoute les Départements d'Outre-Mer Français.
- COM : ajoute les Collectivités d'Outre-Mer Françaises.
- Outre-Mer : ajoute tout l'Outre-Mer Français.
- Corse : ajoute la corse ("FR(2A,2B)").
Vous pouvez interragir avec les pays se trouvant dans l'Aperçu. Si vous cliquez sur l'un d'eux, un menu vous offre la possibilité d'effectuer certaines actions.
L'activation : `enabled`
Permet d'activer ou de désactiver la méthode de livraison.
La valeur doit être booléenne.
Le code : `code`
C'est l'identifiant de la méthode de livraison.
Il doit être unique. S'il n'est pas unique, il sera modifié.
La description : `description`
Il s'agit de la description de la méthode de livraison.
Le fonctionnement est identique à la propriété label.
L'origine : `origin`
Idem que la destination mais pour filtrer l'origine de livraison.
La syntaxe est identique au filtrage de la destination.
Les groupes client : `customer_groups`
On peut utiliser le nom ou l'ID des groupes client.
customer_groups: "NOT LOGGED IN,General",
customer_groups: "0,1",
customer_groups: "Retailer",
Commentaires
Vous pouvez ajouter un commentaire sur la méthode de livraison. Celui-ci ne sera affiché nul part mais vous pouvez y mettre des annotations.