Magento 2: Was ist der Unterschied zwischen Erweiterungsattributen und benutzerdefinierten Attributen?

12

Ich habe Fragen im Kopf, was der genaue Unterschied zwischen Erweiterungsattributen und benutzerdefinierten Attributen ist .

Jemand hier, der mir ein paar Ideen geben kann ?!

anonym
quelle
@Amit, kannst du mir dabei helfen ?!
anonym
Ich bin mir nicht 100% sicher, warum ich die Frage nicht beantworte. Aber meine Sichtweise ist beide gleich
Amit Bera

Antworten:

8

Benutzerdefinierte Attribute sind die Attribute, die hinzugefügt werden, um eine Entität zu beschreiben, z. B. Produktattribute, Kundenattribute usw. Dies ist eine Teilmenge der EAV-Attribute.

Erweiterungsattribute hingegen werden im Allgemeinen für komplexere Datentypen verwendet, z. B. zum Hinzufügen zusätzlicher komplexer Daten zu einer Entität aus einer benutzerdefinierten externen Tabelle.

Einfach ausgedrückt entsprechen benutzerdefinierte Attribute den EAV-Standards, während Erweiterungsattribute für komplexere Daten verwendet werden, die benutzerdefinierte Attribute nicht verarbeiten können.

hungersoft
quelle
5

Benutzerdefinierte Attribute werden im Auftrag eines Händlers hinzugefügt. Beispielsweise muss ein Händler möglicherweise benutzerdefinierte Attribute zur Produktentität mit dem Namen "anpassbar" hinzufügen, in der er Informationen speichern möchte, dass dieses Produkt von Drittanbietern angepasst wird oder nicht.

Sowohl benutzerdefinierte als auch Erweiterungsattribute haben ein bisschen die gleiche Funktionalität (um Daten zu behalten), aber es gibt erhebliche Unterschiede zwischen benutzerdefinierten Attributen und Erweiterungsattributfunktionen. z.B

Wir können zusätzliche Suchkriterien mit Erweiterungsattribut hinzufügen, indem wir sie mit einer anderen DB-Tabelle verknüpfen. Wir können es authentifizieren, indem wir ACL hinzufügen. Lassen Sie uns im Detail erklären.

Bitte schauen Sie sich das folgende Snippet an. Sie müssen eine /etc/extension_attributes.xml erstellen

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

Suchen von Erweiterungsattributen: Im Join-Tag können Sie Ihre betreffende Tabelle definieren, mit der Sie sich verbinden möchten, und Daten aus dieser Tabelle abrufen. Im Attribut reference_table müssen Sie den Tabellennamen angeben, während reference_field der Primärschlüssel (erster Tabellenschlüssel, für den dieses Erweiterungsattribut wie in diesem Beispiel erstellt wird) ist, auf den Sie Ihre Beziehung / Verknüpfung setzen. join_on_field als Namensvorschlag ist die zweite Tabellen-PK, für die Datensätze erstellt werden sollen. Unter Feld-Tags können Sie alle erforderlichen Felder hinzufügen, die Sie tatsächlich abrufen möchten

Authentifizierung von Erweiterungsattributen: Sie können diesen bestimmten Wert für Erweiterungsattribute mithilfe des Tags einschränken. Um dies zu verstehen, haben wir ein Beispiel. Angenommen, wir haben mehr als ein Erweiterungsattribut für Produkte und eines von ihnen sagt extra_special_price, wir möchten es nicht allen Benutzern anzeigen. Wir können dieses Attribut einschränken. Schauen Sie sich das folgende Snippet an.

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

In diesem Beispiel ist das Attribut stock_item nur auf Benutzer beschränkt, die über die Berechtigung Magento_CatalogInventory :: cataloginventory verfügen, während logo_size keine Bedingung enthält.

Wenn Sie nun ein Produktobjekt (auf welche Weise auch immer über die API oder über das Web) erhalten und der aktuelle Benutzer über Berechtigungen für das Kataloginventar verfügt, erhält er nur stock_items-Werte.

Außerhalb des Rahmens dieser Frage sehen Sie sich jedoch an, wie Sie das Attribut mit custom_extension auf folgende Weise auf sehr einfache Weise erstellen : So erstellen Sie extension_attributes

Hassan Ali Shahzad
quelle