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?
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?
Odpowiedzi:
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ć.
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