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") *
* : Voir détails plus bas
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
- {cart.weight}: poids des marchandises
- {cart.quantity}: la quantité d'articles
- {cart.price_including_tax}: prix TTC
- {cart.price_excluding_tax}: prix HT
label: "Colissimo ({cart.weight} / {destination.country.name})",
La ligne ci-dessus affichera par exemple "Colissimo (3.0kg / France)".
La propriété `fees` remplace les propriétés obsolètes `fees_table`, `fees_formula` et `fixed_fees` que l'on peut désormais combiner.
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",
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
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.
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}",
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",
...
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})",
}
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",
...
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
- product.option.* : option
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}",
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}",
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",
...
La propriété `conditions` remplace les propriétés obsolètes `prices_range`, `weights_range` et celles commençant par `free_shipping__`.
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}",
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,DE,CH,ES,IT",
destination: "FR-(2A,2B)",
destination: "FR(2A,2B)",
destination: "* - ( DE, FR(2A,2B) )",
Idem que la destination mais pour filtrer l'origine de livraison.
La syntaxe est identique au filtrage de la destination.
On peut utiliser le nom ou l'ID des groupes client.
customer_groups: "NOT LOGGED IN,General",
customer_groups: "0,1",
customer_groups: "Retailer",