Magento 2: Jaka jest różnica między atrybutami rozszerzeń a atrybutami niestandardowymi?

14

Mam pytanie, jaka jest dokładna różnica między atrybutami rozszerzeń a atrybutami niestandardowymi ?

Ktoś tutaj, kto może dostarczyć mi kilka pomysłów?

anonimowy
źródło
@Amit, możesz mi w tym pomóc?
anonimowy
Nie jestem pewien w 100%, dlaczego nie odpowiadam na pytanie. Ale mój punkt widzenia oba są takie same
Amit Bera

Odpowiedzi:

8

Atrybuty niestandardowe to atrybuty dodane w celu opisania jednostki, takie jak atrybuty produktu, atrybuty klienta itp. Są to podzbiór atrybutów EAV.

Z drugiej strony atrybuty rozszerzeń są zwykle używane do bardziej złożonych typów danych, takich jak dodawanie dodatkowych złożonych danych do encji z niestandardowej tabeli zewnętrznej.

Krótko mówiąc, niestandardowe atrybuty są zgodne ze standardami EAV, podczas gdy atrybuty rozszerzeń są używane w przypadku bardziej złożonych danych, których niestandardowe atrybuty nie mogą obsłużyć.

Hungersoft
źródło
5

Niestandardowe atrybuty to te dodane w imieniu handlowca. Na przykład sprzedawca może potrzebować dodać niestandardowe atrybuty do encji produktu o nazwie „dostosowywalny”, w której chce zapisać informacje, że ten produkt będzie dostosowywany przez firmę zewnętrzną lub nie.

Zarówno atrybuty niestandardowe, jak i rozszerzenia mają nieco tę samą funkcjonalność (w celu zachowania danych), ale istnieją znaczne różnice między funkcjami atrybutów niestandardowych i atrybutów rozszerzenia. na przykład

możemy dodać dodatkowe kryteria wyszukiwania z atrybutem rozszerzenia, łącząc je z dowolną inną tabelą DB. Możemy to uwierzytelnić, dodając do niego ACL. Wyjaśnijmy szczegółowo.

Proszę spojrzeć na następujący fragment kodu. Musisz utworzyć plik /etc/extension_attributes.xml

 <config>
    <extension_attributes for="Path\To\Interface">
        <attribute code="name_of_attribute" type="datatype">
           <resources>
              <resource ref="permission"/>
           </resources>
           <join reference_table="" reference_field="" join_on_field="">
              <field>field1</field>
           <field>field2</field>
           </join>
        </attribute>
    </extension_attributes>
</config>

Wyszukiwanie atrybutów rozszerzenia: W tagu złączenia możesz zdefiniować swoją tabelę dotyczącą, z którą chcesz się połączyć i uzyskać dane z tej tabeli. W atrybucie reference_table musisz podać nazwę tabeli, a pole referencyjne będzie kluczem podstawowym (pierwszy klucz tabeli, dla którego ten atrybut rozszerzenia tworzy się jak w przykładowych produktach), na którym umieścisz relację / złączenie. join_on_field jako nazwa sugerująca będzie drugą tabelą PK, dla której chcemy rekordy. Pod tagami pól możesz dodać wszystkie wymagane pola, które faktycznie chcesz uzyskać

Uwierzytelnianie atrybutu rozszerzenia: Możesz ograniczyć tę konkretną wartość atrybutu rozszerzenia za pomocą znacznika Aby to zrozumieć Pozwól nam podać przykład. Załóżmy, że mamy więcej niż jeden atrybut rozszerzenia dla produktów, a jeden z nich mówi, że cena extra_special_special nie chcemy pokazywać go wszystkim użytkownikom. Możemy ograniczyć ten atrybut. Spójrz na następujący fragment kodu.

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Catalog\Api\Data\ProductInterface">
        <attribute code="stock_item" type="Magento\CatalogInventory\Api\Data\StockItemInterface">
            <resources>
                <resource ref="Magento_CatalogInventory::cataloginventory"/>
            </resources>
        </attribute>
    </extension_attributes>
<attribute code="logo_size" type="string">           
        </attribute>
</config>

W tym przykładzie atrybut stock_item jest ograniczony tylko do użytkowników, którzy mają uprawnienie Magento_CatalogInventory :: cataloginventory, podczas gdy logo_size nie ma żadnego warunku.

Więc teraz, jeśli otrzymasz obiekt produktu (w jakikolwiek sposób za pośrednictwem interfejsu API lub z Internetu), jeśli bieżący użytkownik ma uprawnienia do katalogu, dostanie tylko wartości zapasów.

Poza zakresem tego pytania, ale spójrz, jak utworzysz atrybut za pomocą custom_extension w następujący link w bardzo prosty sposób: Jak utworzyć atrybuty rozszerzenia

Hassan Ali Shahzad
źródło