Usiłuję dodać niestandardowe pole między sekcją adresu wysyłki i metody wysyłki . Chcę, aby wartości tego pola były przechowywane zarówno w tabelach, jak quote
i sales_order
ostatecznie. Jest to podobne do dodawania pola „komentarz do zamówienia”, ale pole to powinno pojawić się zaraz za sekcją adresu wysyłki i przed sekcją metody wysyłki.
Przejrzałem przewodniki deweloperów Magento, jak dodać niestandardowe pole i niestandardowy formularz do kasy i zaimplementowałem rozwiązanie do pewnego stopnia.
Co zrobiłem do tej pory:
- Zaktualizowałem
checkout_index_index.xml
układ, dodałem nowyuiComponent
(kontener) pod pozycją „adres wysyłki”. - Dodano element (pole), którego potrzebuję wewnątrz kontenera.
- Zastąp
/js/view/shipping.js
ishipping.phtml
w moim module niestandardowym. - Wywołano wyżej utworzony pojemnik
shipping.phtml
między adresem wysyłki zamówienia a metodą wysyłki (coś podobnego do dodania nowego statycznego formularza)
Teraz żądane pole jest renderowane w kasie na stronie dokładnie tam, gdzie chcę. Ale spotkałem się z poniższymi problemami.
Jak uzyskać dostęp do wartości niestandardowego pola, które dodałem powyżej? Próbuję zapisać wartość w atrybucie rozszerzenia shippingAddress. Dodałem do niego mixin,
setShippingInformationAction
który próbuje wykonać poniższe czynnościshippingAddress['extension_attributes']['custom_field'] = shippingAddress.customAttributes['custom_field'];
Ale powyższy kod faktycznie zawodzi, ponieważ elementu nie ma w shipping-address-fieldset
. Mogę być w stanie uzyskać wartość przez window
element. Ale czy istnieje sposób, aby uzyskać do tego dostęp za pośrednictwem Magento?
- Czy istnieje sposób na zapisanie wartości tego elementu w lokalnej pamięci podręcznej (
Magento_Checkout/js/checkout-data
), aby wartość ta pozostała nawet po odświeżeniu strony?
Odpowiedzi:
Na podstawie twojego pytania zakładam, że masz już skonfigurowane atrybuty rozszerzenia. Przeprowadziłem podobną modyfikację i mam nadzieję, że moja odpowiedź pomoże.
W swoim module niestandardowym utwórz plik config-wymagany, aby rozszerzyć domyślny procesor wysyłający / domyślny
Dodaj swój atrybut rozszerzenia do ładunku.
Zapisz atrybut do swojego cytatu za pomocą wtyczki (Nie jestem pewien, czy mógłbyś użyć obserwatora tutaj Nie sprawdziłem).
di.xml
SaveAddressInformation.php
Zapisz atrybut do swojego zamówienia za pomocą Observer events.xml
SaveCustomFieldToOrder.php
źródło
map *
, zamiast tego użyj mixin.Utwórz wtyczkę dla tej
\Magento\Checkout\Block\Checkout\LayoutProcessor::process
metody.Wprowadź wpis w pliku di.xml na tej ścieżce
Utwórz klasę wtyczek w tym katalogu.
2 => Utwórz klasę wtyczek w tym katalogu.
app/code/CompanyName\Module\Model\Plugin\Checkout
}
Po wykonaniu tej czynności sprawdź stronę kasy.
źródło