Tengo una pregunta en mi mente, ¿cuál es la diferencia exacta entre los atributos de extensión y los atributos personalizados ?
¿Hay alguien aquí que me pueda dar algunas ideas?
Tengo una pregunta en mi mente, ¿cuál es la diferencia exacta entre los atributos de extensión y los atributos personalizados ?
¿Hay alguien aquí que me pueda dar algunas ideas?
Respuestas:
Los atributos personalizados son los atributos agregados para describir una entidad, como los atributos del producto, los atributos del cliente, etc. Estos son un subconjunto de atributos EAV.
Los atributos de extensión, por otro lado, generalmente se usan para tipos de datos más complejos, como agregar datos complejos adicionales a una entidad desde una tabla externa personalizada.
En pocas palabras, los atributos personalizados se ajustan a los estándares EAV, mientras que los atributos de extensión se utilizan para datos más complejos que los atributos personalizados no pueden manejar.
Los atributos personalizados son aquellos agregados en nombre de un comerciante. Por ejemplo, un comerciante puede necesitar agregar atributos personalizados a la entidad del producto denominada 'personalizable' en la que desea guardar información de que este producto se personalizará de terceros o no.
Tanto los atributos personalizados como los de extensión tienen la misma funcionalidad en cierta medida (para mantener los datos), pero existen diferencias considerables entre los atributos personalizados y la funcionalidad de los atributos de extensión. p.ej
podemos agregar criterios de búsqueda adicionales con el atributo de extensión uniéndolo con cualquier otra tabla de base de datos. Podemos autenticarlo agregando ACL en él. Vamos a explicar con poco detalle.
Eche un vistazo al siguiente fragmento. Debe crear 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>
Búsqueda de atributos de extensión: en la etiqueta de unión puede definir su tabla correspondiente con la que desea unirse y obtener datos de esta tabla. En el atributo reference_table , debe dar el nombre de la tabla, mientras que reference_field será la clave principal (primera clave de tabla para la cual este atributo de extensión creará como en este ejemplo de productos) en la que colocará su relación / unión. join_on_field como nombre sugerido serán las segundas tablas PK contra las cuales queremos registros. En las etiquetas de campos, puede agregar todos los campos obligatorios en realidad desea obtener datos
Autenticación de atributo de extensión: puede restringir este valor de atributo de extensión particular mediante el uso de la etiqueta. Para comprender esto, tengamos un ejemplo. Supongamos que tenemos más de un atributo de extensión para productos y uno de ellos dice extra_special_price que no queremos mostrar a todos los usuarios. Podemos restringir este atributo. Echa un vistazo al siguiente fragmento.
<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>
En este ejemplo, el atributo stock_item está restringido solo a los usuarios que tienen el permiso Magento_CatalogInventory :: cataloginventory, mientras que logo_size no tiene ninguna condición.
Entonces, si obtiene un objeto de producto (de cualquier manera a través de api o de la web) si el usuario actual tiene permisos para el inventario de catálogo, obtendrá solo valores stock_items.
Fuera del alcance de esta pregunta, pero eche un vistazo a cómo creará el atributo usando custom_extension en el siguiente enlace de una manera muy simple: Cómo crear extension_attributes