У мене є питання, яка точна різниця між атрибутами розширення та спеціальними атрибутами ?
Хтось тут, хто може запропонувати мені кілька ідей ?!
У мене є питання, яка точна різниця між атрибутами розширення та спеціальними атрибутами ?
Хтось тут, хто може запропонувати мені кілька ідей ?!
Відповіді:
Спеціальні атрибути - це атрибути, додані для опису сутності, такі як атрибути продукту, атрибути клієнта тощо. Це підмножина атрибутів EAV.
Атрибути розширення з іншого боку, як правило, використовуються для більш складних типів даних, таких як додавання додаткових складних даних в об'єкт із спеціальної зовнішньої таблиці.
Простіше кажучи, спеціальні атрибути відповідають стандартам EAV, тоді як атрибути розширення використовуються для більш складних даних, з якими власні атрибути не можуть працювати.
Спеціальні атрибути - це ті, які додаються від імені продавця. Наприклад, продавцю, можливо, потрібно буде додати спеціальні атрибути до об'єкта продукту з назвою "customizeable", в якому він хоче зберегти інформацію про те, що цей товар буде налаштований від третьої сторони чи ні.
Як спеціальні, так і атрибути розширення мають однакову функціональність (для збереження даних), але є значна різниця між спеціальними атрибутами та функціональними атрибутами розширення. напр
ми можемо додати додаткові критерії пошуку з атрибутом розширення, приєднавши його до будь-якої іншої таблиці БД. Ми можемо автентифікувати його, додавши в нього ACL. Давайте пояснимо докладно.
Перегляньте наступний фрагмент. Ви повинні створити /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>
Пошук атрибутів розширення: у тезі приєднання ви можете визначити свою таблицю, з якою ви хочете приєднатись, та отримати дані з цієї таблиці. У атрибуті reference_table потрібно вказати ім'я таблиці, тоді як reference_field буде первинним ключем (перший ключ таблиці, для якого цей атрибут розширення створюється як у цьому прикладі продуктів), на який ви ставите своє відношення / приєднання. join_on_field, як підказує ім'я, буде другими таблицями ПК, проти яких ми хочемо записувати. Під тегами полів ви можете додати всі необхідні поля, фактично хочете отримати дані
Перевірка автентичності атрибуту розширення: Ви можете обмежити це значення атрибута конкретного розширення, використовуючи тег. Щоб зрозуміти це, Давайте маємо приклад. Скажімо, у нас є більше одного атрибута розширення для продуктів, і один з них говорить extra_special_price, що ми не хочемо показувати це всім користувачам. Ми можемо обмежити цей атрибут. Подивіться на наступний фрагмент.
<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>
У цьому прикладі атрибут stock_item обмежений лише користувачами, які мають дозвіл Magento_CatalogInventory :: cataloginventory, тоді як logo_size не має жодних умов щодо нього.
Отже, якщо ви отримаєте об'єкт продукту (як ніколи через api чи з Інтернету), якщо поточний користувач має дозволи для каталогуінвентаризації, він отримає лише значення stock_items.
За межами цього питання, але подивіться, як ви створите атрибут за допомогою custom_extension за наступним посиланням дуже простим способом: Як створити extension_attributes