window.aftersell.cart.hooks.
Un hook change ce que l’acheteur voit ; une action change ce qui est dans son panier. Masquer une ligne de cadeau gratuit avec une transformation la laisse dans le panier et dans le total. La retirer avec
removeItem la supprime pour de bon.Les hooks sont des appels de configuration, il est donc sûr de les enregistrer tout en haut de votre script, sans besoin d’attendre
ready(). Enregistrez-les dans le script Initialization de votre panier (voir Scripts personnalisés).Comment fonctionne l’enregistrement
register*. Vous l’appelez avec votre fonction ; elle renvoie une fonction de désenregistrement que vous pouvez appeler pour retirer la vôtre.
Un hook qui lève une exception, ou qui n’est pas une fonction, est ignoré ; les autres s’exécutent quand même, et le panier continue. Une intégration défaillante ne peut pas faire tomber l’ajout au panier, le sélecteur d’abonnement ou le tri.
Le revers de la médaille est qu’un hook défaillant de votre part échoue silencieusement : rien n’atteint la console du navigateur. Consultez Débogage pour savoir où ces échecs apparaissent réellement.
registerLineTransform
registerLineTransform(fn) s’exécute pour chaque ligne du panier avant son rendu. Utilisez-le pour masquer une ligne ou changer sa présentation, sans toucher à ce qui est réellement dans le panier de l’acheteur.
La fonction reçoit une ligne en lecture seule plus des setters. Elle renvoie une fonction de désenregistrement.
setInternalProperties est le setter derrière le regroupement de bundles : apposer les propriétés canoniques du bundle sur chaque ligne est la façon de faire s’afficher les lignes de panier séparées d’une application tierce comme un seul article. Consultez Regrouper les lignes de bundle d’une autre application.
registerLineComparator
Array.prototype.sort. Il s’exécute après le masquage et le renommage, donc il voit les lignes transformées.
0 pour les paires sur lesquelles vous n’avez pas d’avis. C’est ce qui transmet la décision au comparateur suivant au lieu de lui imposer un ordre.
À utiliser pour : faire remonter les abonnements ou les articles à forte valeur en haut, faire descendre les cadeaux gratuits et les options complémentaires en bas, garder un produit sponsorisé en premier.
registerCartEnricher
registerCartEnricher(registration) récupère des données supplémentaires de produit ou de variante depuis l’API Storefront de Shopify et les attache à chaque ligne de panier correspondante dans line.metadata[id]. Utilisez-le pour faire apparaître des metafields, des tags ou tout autre élément exposé par l’API Storefront, sans aucun changement de code requis de la part d’Aftersell.
Renvoie une fonction de désenregistrement.
Chaque fois que le panier se charge ou change, Aftersell récupère votre fragment pour chaque produit ou variante du panier et attache le résultat. La récupération est non bloquante : le panier s’affiche immédiatement et réémet
cart_updated une fois les données arrivées. Un fragment lent ou défaillant ne retarde ni ne casse jamais le panier.
line.metadata.pricing est undefined jusqu’à ce que la première récupération se résolve, et metadata lui-même vaut {} par défaut.
À utiliser pour : tirer un metafield sur chaque ligne (une estimation de livraison, une liste d’ingrédients, un indicateur « expédié séparément », un multiplicateur de fidélité) et l’afficher via un bloc Custom code. Consultez afficher les données de metafields sur les lignes du panier.
Plusieurs enrichisseurs coexistent sans problème, puisque chaque
id est son propre espace de noms, leurs données n’entrent donc jamais en collision.registerSubscriptionOptionsTransform
options.filter(...) et supprimerait silencieusement au passage les plans de toutes les autres applications. Avec les setters, vous ne pouvez décrire que vos propres modifications : les correctifs fusionnent par plan et par champ, et le dernier écrivain l’emporte lors d’un véritable conflit sur le même champ du même plan. Une transformation qui lève une exception ne contribue à rien, et les autres s’appliquent quand même.
Chaque transformation voit les options originales, pas une vue à moitié corrigée, donc l’ordre d’enregistrement ne change pas ce que vous lisez.
L’ordre des plans reste tel que Shopify l’a renvoyé, donc une transformation ne peut pas réordonner. Pour contrôler quel plan est proposé en premier (et auquel le bouton de passage à l’abonnement souscrit), utilisez
registerDefaultSubscriptionOptionSelector, qui fait remonter son choix en tête.discountPercent n’a pas de setter, car un plan que Shopify n’honorera pas au paiement ne serait qu’une promesse brisée dans le sélecteur.
registerDefaultSubscriptionOptionSelector
id de plan, ou null pour passer votre tour.
null pour les lignes qui ne vous intéressent pas plutôt que de deviner. Cela transmet la décision au sélecteur suivant au lieu de la court-circuiter. Un id qui ne correspond à aucun plan de la ligne est traité comme null et s’efface également, donc un id obsolète ne peut pas vider le sélecteur.
Votre fonction reçoit (options, context), le même context que reçoit la transformation d’options.
registerSkipAddToCartRule
true pour laisser un formulaire produit spécifique ajouter au panier normalement, en contournant entièrement Aftersell. C’est utile pour un formulaire qui a besoin de sa propre redirection ou gestion.
true fait passer outre, donc gardez votre règle étroite, correspondant aux formulaires spécifiques qui vous appartiennent, et renvoyez false pour tout le reste. Les règles sont évaluées dans l’ordre d’enregistrement et s’arrêtent au premier true, donc n’y mettez pas d’effets de bord : le fait que la vôtre s’exécute ou non dépend de ce qui s’est enregistré avant elle.
À utiliser pour : un formulaire de précommande ou de devis qui a besoin de sa propre redirection, le flux personnalisé d’une application d’abonnement, un bouton « acheter maintenant » qui doit aller directement au paiement. Pour désactiver plutôt l’interception pour toute la page, utilisez skip_add_to_cart_interceptor, mais préférez ce hook, qui est limité aux formulaires que vous nommez.
Pour aller plus loin
- Objet cart : la forme de la ligne que reçoit une transformation.
- Événements : tout ce à quoi vous pouvez vous abonner.
- Actions : lire et modifier le panier.
- Cas d’usage : des solutions complètes aux demandes courantes.