Magento 2: Quelle est la différence entre les attributs d'extension et les attributs personnalisés?

13

Je me demande quelle est la différence exacte entre les attributs d'extension et les attributs personnalisés ?

Quelqu'un ici qui peut me donner des idées?!

anonyme
la source
@Amit, pouvez-vous m'aider?!
anonyme
Je ne suis pas sûr à 100% pourquoi je ne réponds pas à la question. Mais mon point de vue est le même
Amit Bera

Réponses:

8

Les attributs personnalisés sont les attributs ajoutés pour décrire une entité, tels que les attributs de produit, les attributs de client, etc. Il s'agit d'un sous-ensemble d'attributs EAV.

D'un autre côté, les attributs d'extension sont généralement utilisés pour des types de données plus complexes tels que l'ajout de données complexes supplémentaires dans une entité à partir d'une table externe personnalisée.

Autrement dit, les attributs personnalisés sont conformes aux normes EAV tandis que les attributs d'extension sont utilisés pour des données plus complexes que les attributs personnalisés ne peuvent pas gérer.

Hungersoft
la source
5

Les attributs personnalisés sont ceux ajoutés au nom d'un marchand. Par exemple, un marchand peut avoir besoin d'ajouter des attributs personnalisés à l'entité de produit nommée «personnalisable» dans lesquels il souhaite enregistrer des informations selon lesquelles ce produit sera personnalisé ou non par un tiers.

Les attributs personnalisés et les attributs d'extension ont tous deux la même fonctionnalité (pour conserver les données), mais il existe une différence considérable entre les attributs personnalisés et la fonctionnalité des attributs d'extension. par exemple

nous pouvons ajouter des critères de recherche supplémentaires avec l'attribut d'extension en le joignant à n'importe quelle autre table DB. Nous pouvons l'authentifier en y ajoutant ACL. Expliquons en détail.

Veuillez consulter l'extrait de code suivant. Vous devez créer un /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>

Recherche d'attributs d'extension: dans la balise de jointure, vous pouvez définir votre table concernée avec laquelle vous souhaitez vous joindre et obtenir des données de cette table. Dans l' attribut reference_table, vous devez donner le nom de la table tandis que reference_field sera la clé primaire (première clé de table pour laquelle cet attribut d'extension crée comme dans cet exemple de produits) sur laquelle vous mettez votre relation / jointure. join_on_field comme nom suggérant sera la deuxième table PK contre laquelle nous voulons des enregistrements. Sous les balises de champs, vous pouvez ajouter tous vos champs obligatoires en fait, vous voulez obtenir des données

Authentification d'attribut d'extension: vous pouvez restreindre cette valeur particulière d'attribut d'extension à l'aide de la balise. Pour comprendre cela, Prenons un exemple. Supposons que nous ayons plus d'un attribut d'extension pour les produits et que l'un d'eux indique extra_special_price, nous ne voulons pas le montrer à tous les utilisateurs. Nous pouvons restreindre cet attribut. Jetez un œil à l'extrait suivant.

<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>

Dans cet exemple, l'attribut stock_item est limité aux seuls utilisateurs qui ont l'autorisation Magento_CatalogInventory :: cataloginventory alors que logo_size n'a aucune condition.

Alors maintenant, si vous obtenez un objet produit (de quelque manière que ce soit via l'API ou à partir du Web) si l'utilisateur actuel a des autorisations pour cataloginventory, il obtiendra uniquement les valeurs stock_items.

Hors de portée de cette question mais regardez comment vous allez créer l'attribut en utilisant custom_extension dans le lien suivant de manière très simple: Comment créer extension_attributes

Hassan Ali Shahzad
la source