Tous les tutoriels ne couvrent que l’ajout de champs, mais la sauvegarde de la valeur de ce fichier est ignorée. Je ne sais pas pourquoi, c'est la partie la plus importante de l'ajout de tout champ ou formulaire.
J'ai essayé de suivre la documentation de Magento , mais ... ça craint.
À des fins de test, j'essaie d'ajouter d'autres champs à l'adresse d'expédition, simplement pour ignorer les étendues personnalisées, les ensembles de données personnalisés, les fournisseurs de données personnalisés et d'autres éléments non documentés, ce qui me semble trop étrange.
Je n'ai aucune idée de ce que signifie cette forme "statique" ou "dynamique". Pour moi, tous les formulaires de paiement sont construits de manière dynamique sur les modèles KnockoutJS, mais ... lorsque j'essaie de manière "statique", je peux ajouter des entrées ici (donc c'est un formulaire statique ou pas?).
J'essaie d'abord de déboguer pourquoi les observables Knockout ignorent simplement mes champs lors de l'analyse et de l'envoi de données. J'ai trouvé que mes champs ont un name
paramètre vide , mais je ne parviens pas à résoudre ce problème. IMO il devrait être passé au moteur de rendu d'interface utilisateur via un inputName
paramètre, comme toutes les autres options telles que disabled
, placeholder
etc.
Deuxièmement, j'ai essayé d'utiliser la méthode "dynamique" pour créer un plugin avec LayoutProcessor
et transmettre exactement les mêmes données ... et maintenant, j'ai des champs avec name
s, mais l'envoi ne fonctionne toujours pas du tout.
Après avoir fouillé dans JS, j’ai trouvé que la préparation de cette demande était conservée dans un module-checkout/view/frontend/web/js/model/shipping-save-processor/default.js
fichier, qui dépend du lieu module-checkout/view/frontend/web/js/model/quote.js
où les observables Knockout sont définis / créés.
D'une manière ou d'une autre, module-checkout/view/frontend/web/js/model/address-converter.js
mettez à jour ces observables et dépend module-checkout/view/frontend/web/js/model/new-customer-address.js
où j'ai finalement trouvé quelques options de configuration intéressantes - liste de tous les champs d'adresse.
Lorsque j'ajoute mes champs ici, les scripts commencent à être analysés et envoyés, OFC j'en reçois 500, le backend b / c ne les reconnaît pas ... (ne demandez pas, je ne suis pas un développeur backend)
Alors voici mes questions:
- C'est une bonne façon de gérer ce type de personnalisation? (b / c semble bizarre pour moi)
- Comment envoyer des valeurs de champs non liées à de nouvelles adresses? Je n'ai vu aucune configuration similaire nulle part. Dans mon cas, j'aimerais envoyer un commentaire de commande (textarea) et une demande de facture (case à cocher). Les deux ne doivent pas être enregistrés en tant qu’adresse, car certains utilisateurs souhaiteront peut-être enregistrer cette adresse pour une utilisation ultérieure.
- Existe-t-il une documentation sur les formulaires "statiques" et "dynamiques" ou quelques exemples / comparaisons? Ça vaut la peine d'y penser de cette façon?
Question existentielle supplémentaire:
- Pourquoi est-ce si incohérent? Pourquoi dois-je définir des tonnes de paramètres dans des fichiers XML / PHP, alors que Magento ne peut tout simplement que restituer une entrée et que je dois tout gérer moi-même?
la source
Réponses:
Je vais essayer de répondre à vos questions.
Non . Ce n'est pas une façon correcte d'ajouter des attributs personnalisés au formulaire d'adresse de livraison. Vous n'avez pas besoin de modifier
new-customer-address.js
. En effet, ce fichier JS répertorie tous les attributs d'adresse prédéfinis et correspond à l'interface principale correspondante,\Magento\Quote\Api\Data\AddressInterface
mais Magento permet de transmettre tous les attributs personnalisés au système principal sans modifier les composants backend / frontend .Le composant JS mentionné a une
customAttributes
propriété. Vos attributs personnalisés seront automatiquement gérés s'ils$dataScopePrefix
sont 'shippindAddress.custom_attributes
'.Si j'ai bien compris votre question, vous avez des données qui ne font pas partie de l'adresse du client mais vous devez également les envoyer au backend. La réponse à cette question est:
Cela dépend . Par exemple, vous pouvez choisir l’approche suivante: ajouter un formulaire personnalisé à la page de paiement qui inclut tous vos champs supplémentaires
(like comment, invoice request etc)
, ajouter une logique JS qui gérera ce formulaire en fonction de certains événements et fournir un service personnalisé qui recevra les données de frontend et stockera quelque part pour une utilisation future.Tous les documents officiels liés au paiement se trouvent à l' adresse http://devdocs.magento.com/guides/v2.1/howdoi/checkout/checkout_overview.html . Le terme statique fait référence aux formulaires dans lesquels tous les champs sont déjà connus / prédéfinis (par exemple: le formulaire aura toujours deux champs de texte avec des étiquettes prédéfinies) et ne peut pas être modifié en fonction de certains paramètres du backend.
De tels formulaires peuvent être déclarés en utilisant
layout XML configuration
. D'autre part, le terme dynamique fait référence aux formulaires dont l'ensemble de champs peut changer (par exemple: le formulaire de paiement peut avoir plus / moins de champs en fonction des paramètres de configuration).Dans ce cas, le seul moyen de déclarer un tel formulaire est d'utiliser un
LayoutProcessor
plugin.:) Magento essaie de couvrir autant que possible les cas d’utilisation pouvant être significatifs pour les marchands lors de l’utilisation / personnalisation de Magento. Parfois, cela conduit à une situation où certains cas d'utilisation simples deviennent plus complexes.
J'espère que cela t'aides.
=============================================== ========================
OK ... Permet d'écrire du code;)
========
Comme je l'ai déjà mentionné, cela ajoutera votre champ à la
customAttributes
propriété de l'objet adresse JS. Cette propriété a été conçue pour contenir des attributs d'adresse EAV personnalisés et est liée à la\Magento\Quote\Model\Quote\Address\CustomAttributeListInterface::getAttributes
méthode.Le code ci-dessus gérera automatiquement la persistance du stockage local sur le client. Vous pouvez obtenir votre valeur de champ à partir du stockage local en utilisant
checkoutData.getShippingAddressFromData()
(oùcheckoutData
estMagento_Checkout/js/checkout-data
).========
========
Cela ajoutera un attribut d’extension au modèle d’adresse du côté serveur. Les attributs d'extension sont l'un des points d'extension fournis par Magento. Pour accéder à vos données sur le backend, vous pouvez utiliser:
Espérons que cela aidera et sera ajouté à la documentation officielle.
la source
custom_attributes
bien, mais ça ne marche pas pour moi. Voici à quoi ressemble une partie de LayoutProcessor.php` - gist.github.com/Igloczek/eaf4d2d7a0a04bd950110296ec3f7727 Maisshipping-info
même localStoragecheckout-data
ne contient pas ces données.D'après mon expérience, m2 utilise xml pour définir des composants tels que des champs, etc. C'est une aide pour le débogage, une interaction avec les données plus facile. Sur le terrain des frontaux, vous devriez essayer de remplacer les modèles de caisse et d'y ajouter vos propres champs personnalisés. Avec KO vous aide à travailler et à relier des données de front et de back-end
la source