Magento 2: В чем разница между атрибутами расширения и пользовательскими атрибутами?

13

У меня есть вопрос, какова точная разница между расширением атрибутов и пользовательских атрибутов ?

Кто-нибудь здесь, кто может дать мне несколько идей ?!

анонимный
источник
@Amit, можешь помочь мне с этим ?!
анонимно
Я не уверен на 100%, поэтому я не отвечаю на вопрос. Но моя точка зрения и такая же
Amit Бер

Ответы:

8

Пользовательские атрибуты - это атрибуты, добавленные для описания объекта, такие как атрибуты продукта, атрибуты клиента и т. Д. Это подмножество атрибутов EAV.

Атрибуты расширения, с другой стороны, обычно используются для более сложных типов данных, таких как добавление дополнительных сложных данных в объект из пользовательской внешней таблицы.

Проще говоря, пользовательские атрибуты соответствуют стандартам EAV, тогда как атрибуты расширения используются для более сложных данных, которые пользовательские атрибуты не могут обрабатывать.

hungersoft
источник
5

Пользовательские атрибуты - это те, которые добавляются от имени продавца. Например, продавцу может потребоваться добавить пользовательские атрибуты к сущности продукта с именем «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

Хасан Али Шахзад
источник