J'essaie d'ajouter un champ personnalisé entre l' adresse de livraison et les sections de méthode d'expédition . Et je veux que les valeurs de ce champ soient stockées dans les deux quote
et les sales_order
tables en fin de compte. C'est quelque chose de similaire à l'ajout d'un champ "commentaire de commande", mais ce champ doit apparaître juste après la section d'adresse de livraison et avant la section méthode d'expédition.
J'ai parcouru les guides de développement de Magento sur la façon d'ajouter un champ personnalisé et un formulaire personnalisé à la caisse et j'ai implémenté une solution dans une certaine mesure.
Ce que j'ai fait jusqu'à présent:
- Mise à jour de la
checkout_index_index.xml
mise en page, ajout d'un nouveauuiComponent
(un conteneur) sous l'article "shippingAddress". - Ajout de l'élément (champ) dont j'ai besoin à l'intérieur du conteneur.
- Remplacez le
/js/view/shipping.js
etshipping.phtml
dans mon module personnalisé. - Appelé le conteneur ci-dessus à l'intérieur
shipping.phtml
entre l'adresse de livraison et la méthode d'expédition (quelque chose de similaire à l'ajout d'un nouveau formulaire statique)
Maintenant, le champ que je veux est affiché sur la caisse à la page exactement où je veux. Mais j'ai rencontré des problèmes ci-dessous.
Comment accéder à la valeur du champ personnalisé que j'ai ajouté ci-dessus? J'essaie d'enregistrer la valeur dans un attribut d'extension shippingAddress. J'ai ajouté un mixin à l'
setShippingInformationAction
intérieur qui essaie de faire ce qui suitshippingAddress['extension_attributes']['custom_field'] = shippingAddress.customAttributes['custom_field'];
Mais le code ci-dessus échoue en fait puisque l'élément n'est pas dans le shipping-address-fieldset
. Je pourrais peut-être obtenir la valeur à travers l' window
élément. Mais existe-t-il un moyen d'y accéder via Magento?
- Existe-t-il un moyen de sauvegarder la valeur de cet élément dans le cache local storage (
Magento_Checkout/js/checkout-data
) afin que la valeur persiste même après une actualisation de page?
Réponses:
Sur la base de votre question, je suppose que vos attributs d'extension sont déjà configurés. J'ai effectué une modification similaire et j'espère que ma réponse vous aidera.
Dans votre module personnalisé, créez un fichier requirejs-config pour étendre le processeur d'expédition par défaut / default
Ajoutez votre attribut d'extension à la charge utile.
Enregistrez l'attribut dans votre devis avec un plugin (je ne sais pas si vous pouvez utiliser un observateur ici, je n'ai pas vérifié).
di.xml
SaveAddressInformation.php
Enregistrez l'attribut dans votre commande avec un observateur events.xml
SaveCustomFieldToOrder.php
la source
map *
, utilisez plutôt mixin.Créez un plugin pour cette
\Magento\Checkout\Block\Checkout\LayoutProcessor::process
méthode.Faites une entrée dans di.xml sur ce chemin
Créez une classe de plugin sur ce répertoire.
2 => Créer une classe de plugin sur ce répertoire.
app/code/CompanyName\Module\Model\Plugin\Checkout
}
Une fois cela fait, consultez la page de paiement.
la source