Aller au contenu

Planification

phil/commerce-product-template

VariantPlanner::plan($template, $design) donne les produits d'un visuel fabriqué sur un gabarit, sous forme de liste de Variant : par version linguistique, puis dans l'ordre des combinaisons du gabarit.

Ce que contient un plan

Un produit pour chaque version linguistique du visuel — ou un seul, pour un visuel en une langue — et pour chaque combinaison que le gabarit fabrique, que le visuel permet et qu'un canal vend. Chaque Variant a :

MembreCe que c'est
skuLe patron rendu avec les codes du visuel, de la langue, du gabarit et des valeurs
design, template, language, combinationCe à partir de quoi il a été planifié
priceLe prix que donne le gabarit à sa combinaison
channelsLes canaux qui le vendent ; tous les canaux quand la liste est vide
artworksUn PlacedArtwork par zone qu'il imprime, dans l'ordre des faces et des zones du gabarit
name($defaultLocale)Design – Template (value, value, value) dans la locale de sa langue, sinon celle par défaut
attributes()design, template, language quand il en a une, et le code de chaque valeur par axe
photo($face)La photo de l'article vierge sur cette face : la première valeur de sa combinaison qui en a une

Canaux : les valeurs qui nomment des canaux restreignent leurs produits aux canaux qu'elles partagent toutes. Une combinaison dont les valeurs n'en partagent aucun — une valeur vendue seulement en ligne avec une autre vendue seulement à un kiosque — n'est pas planifiée.

Les mêmes entrées, le même plan

Un plan ne dépend que de son gabarit et de son visuel, et liste ses produits dans un ordre stable. Un générateur qui l'exécute de nouveau après un changement retrouve les produits qu'il a déjà créés par leurs UGS, les met à jour, crée les nouveaux et retire ceux que le plan n'a plus. Le planificateur lui-même ne stocke jamais rien.

Ce que refuse un plan

PlanRefused, avant qu'aucun produit ne soit donné :

FabriqueQuand
templateNotAllowed()Le visuel n'est pas fabriqué sur le gabarit
collision()Deux produits partagent une UGS : le message nomme l'UGS et les deux produits
invalidSku()Une UGS n'est pas formée de 1 à 64 lettres, chiffres, ., _ ou -, commençant par une lettre ou un chiffre
unknownZone()Une illustration nomme une zone absente de sa face
ambiguousArtwork()Deux illustrations s'appliquent également à une zone d'un produit
tooMany()Le plan a plus de produits que la limite du planificateur

Limites

Un gabarit a au plus 8 axes et 10 000 combinaisons, un visuel au plus 8 versions linguistiques : un plan reste donc borné. La limite du planificateur est de 20 000 produits par défaut, et plus basse quand elle est donnée : new VariantPlanner(5_000). Planifier 5 400 produits prend quelques dizaines de millisecondes (Tests).