Jak korzystać z rozszerzeń_atrybutów w Magento2


Odpowiedzi:


18

Załóżmy, że tworzymy datę dostawy zamówienia, kiedy klient wybiera wysyłkę, wtedy klient może wybrać datę dostawy. Możesz więc utworzyć atrybut rozszerzenia dla \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface w następujący sposób


<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Checkout\Api\Data\ShippingInformationInterface">
        <attribute code="delivery_date" type="string"/>
    </extension_attributes>
</config>

Teraz możesz uzyskać dostęp do tej wartości, używając \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface jako di.

W takim przypadku Magento \ Checkout \ Model \ ShippingInformationManagement w tej klasie użyj \ Magento \ Checkout \ Api \ Data \ ShippingInformationInterface jako parametrów metody saveAddressInformation. Aby uzyskać dostęp do następującego sposobu:


$extAttributes = $addressInformation->getExtensionAttributes();
$deliveryDate = $extAttributes->getDeliveryDate();

Aby uzyskać więcej informacji (oficjalna dokumentacja Magento 2)

Oto przykład:

rozszerzenia_atrybuty

Wybierz wartość atrybutów rozszerzenia

[Aktualizacja]

Można ustawić rozszerzenie_atrybuty metodą setExtensionAttributes . Następująca klasa jest przykładem: Kliknij tutaj


Więc po co jest setExtensionAttributes?
Phoenix128_RiccardoT

Zaktualizowałem z prawdziwym przykładem
Sohel Rana

Świetnie, ale brakuje tutaj jednej rzeczy: gdzie dokładnie są przechowywane atrybuty rozszerzenia? Czy muszę sam podać kod do zapisywania i pobierania atrybutów, czy może Magento sobie z tym poradzi (podobnie jak w przypadku atrybutów niestandardowych)?
Martin Wickman

Czy rozumiem poprawnie, że wtyczki są wymagane extension_attributesdo działania? Na przykład, czy zawsze muszę dodawać wtyczkę afterLoaddla klientów, jeśli chcę mieć niestandardowy atrybut dla klientów? Wydaje mi się to trochę nad głową ...
Giel Berkers

1
@MartinWickman tak, to do programisty należy wdrożenie logiki pobierania i utrwalania danych atrybutów rozszerzenia. Koncepcja polega na tym, że niektóre potencjalnie złożone dane zostały wprowadzone przez moduł dla jednostek produktu i dane te mogą pochodzić z jednej lub więcej tabel bazy danych lub innego źródła danych, nie powinno to mieć znaczenia. Korzystając z systemu wtyczek, celuj metody ładowania ProductRepository (np. AfterGet, afterGetList). Tutaj pobierasz swoje dane (skądkolwiek) i dodajesz je do atrybutów rozszerzenia encji. Wydaje się to uciążliwe, ale jest bardzo elastyczne i potężne.
John Hall
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.