У меня есть вопрос, какова точная разница между расширением атрибутов и пользовательских атрибутов ?
Кто-нибудь здесь, кто может дать мне несколько идей ?!
У меня есть вопрос, какова точная разница между расширением атрибутов и пользовательских атрибутов ?
Кто-нибудь здесь, кто может дать мне несколько идей ?!
Ответы:
Пользовательские атрибуты - это атрибуты, добавленные для описания объекта, такие как атрибуты продукта, атрибуты клиента и т. Д. Это подмножество атрибутов 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, как подсказывает название, будет вторыми таблицами PK, для которых нам нужны записи. Под тегами полей вы можете добавить все необходимые поля, которые вы хотите получить данные
Аутентификация атрибута расширения: Вы можете ограничить это конкретное значение атрибута расширения с помощью тега. Чтобы понять это, давайте приведем пример. Скажем, у нас есть более одного атрибута расширения для продуктов, и один из них говорит, что 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