Magento2EAVandextensionattributes

编程

一、有两种类型的属性可以扩展magento 功能:

1:Custom and Entity-attribute-Value (EAV) attributes - Custom属性是可以由商家在后台直接添加的属性。比如,一个商家可能想添加一个属性来描述产品,比如产品的形状或者是体积。商家可以在Magento Admin 面板添加这些属性。

Custom 属性是EAV属性的一部分。使用EAV属性的对象一贯将值保存在几个不同的Mysql表里。Customer 和 Catalog 是使用EAV属性的主要两个模块。其它的模块像C onfigurableProduct , GiftMessage 和Tax 使用的是Catalog的EAV功能。

2.Extension attributes. Extension attributes 是magento2的新功能。他们被用来扩展功能,而且大多数情况下数据会比custom属性复杂。这些属性不会再magento admin里出现。

二、EAV 和 Custom属性
CustomAttributesDataInterface定义了用来get 和 set custom属性的方法,包括getCustomAttributes()
一个模块通常会有一系列内置属性。Catalog模块有一些属性被定义为EAV属性,但是是以内置属性来处理的,这些属性包括:
 

  • attribute_set_id
  • created_at
  • group_price
  • media_gallery
  • name
  • price
  • sku
  • status
  • store_id
  • tier_price
  • type_id
  • updated_at
  • visibility
  • weight

在这种情况下,当调用getCustomAttributes()方法的时候,列表里的属性将不会被返回。

Customer模块没有对它对EAV属性做特殊处理,所以,getCustomAttributes() 将返回所有的EAV属性。

 

Both the save() and getResource() methods for MagentoFrameworkModelAbstractModel have been marked as @deprecated since 2.1 and should no longer be used.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

<?php

namespace MagentoCustomerSetupPatchData;

use MagentoCustomerModelCustomer;

use MagentoCustomerSetupCustomerSetupFactory;

use MagentoFrameworkAppResourceConnection;

use MagentoFrameworkSetupModuleDataSetupInterface;

use MagentoFrameworkSetupPatchDataPatchInterface;

use MagentoFrameworkSetupPatchPatchVersionInterface;

class AddCustomerExampleAttribute implements DataPatchInterface

{

private $moduleDataSetup;

private $customerSetupFactory;

public function __construct(

ModuleDataSetupInterface $moduleDataSetup,

CustomerSetupFactory $customerSetupFactory

) {

$this->moduleDataSetup = $moduleDataSetup;

$this->customerSetupFactory = $customerSetupFactory;

}

public function apply()

{

$customerSetup = $this->customerSetupFactory->create(["setup" => $this->moduleDataSetup]);

$customerSetup->addAttribute(Customer::ENTITY, "attribute_code", [

// Attribute parameters

]);

}

/**

* {@inheritdoc}

*/

public static function getDependencies()

{

return [

UpdateIdentifierCustomerAttributesVisibility::class,

];

}

public function getAliases()

{

return [];

}

}

二、Extension attributes
使用ExtensibleDataInterface来实现extension属性。在你的代码里,你必须声明 
getExtensionAttributes()和setExtensionAttributes(*ExtensionInterface param).
很大程度上,你需要扩展在Api/Data directory 定义好的模块。


声明Extension attributes
你必须创建一个 <Module>/etc/extension_attributes.xml文件来定义一个模块的扩展属性:
 

<config>

<extension_attributes for="PathToInterface">

<attribute code="name_of_attribute" type="datatype">

<resources>

<resource ref="permission"/>

</resources>

<join reference_table="" reference_field="" join_on_field="">

<field>fieldname</field>

</join>

</attribute>

</extension_attributes>

</config>

搜索extension 属性:
系统使用Join把扩展属性添加到collection以供筛选。extension_attribute.xml定义了那个表/列的那个字段被用来作为搜索的源。

在下面的例子中,MagentoCatalogInventoryApiDataStockItemInterface类型的属性stock_item,被添加带来MagentoCatalogApiDataProductInterface的搜索结果
当getList()方法被调用的时候会返回ProductInterfaces的列表,这时,由于Product’s entity_Id 和cataloginventory_stock_item.product_id已被关联起来,stock_item将被赋予cataloginventory_stock_item表里的qty字段。

extension字段访问权限

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">

<extension_attributes for="MagentoCatalogApiDataProductInterface">

<attribute code="stock_item" type="MagentoCatalogInventoryApiDataStockItemInterface">

<resources>

<resource ref="Magento_CatalogInventory::cataloginventory"/>

</resources>

</attribute>

</extension_attributes>

</config>

这里表示,只有拥有Magento_CatalogInventory::cataloginventory权限的人才能访问
stock_item.

Extension 接口
如果extension属性为空,extension接口会为空。

interface CustomerExtensionInterface extends MagentoFrameworkApiExtensionAttributesInterface { }
但是,如果一个如下的扩展被添加,接口就不会为空:

<extension_attributes for="MagentoCustomerApiDataCustomerInterface">

<attribute code="attributeName" type="MagentoSomeType[]" />

</extension_attributes>

调试EAV属性
如果你再使用setup:upgrade的时候遇到问题,请去确认下__construct使用了EavSetupFactory而不是EavSetup。你不能在扩展的代码里直接注入EavSetup。检查你的定制模块或者购买的扩展,修改完之后应该就能正常部署了。

添加产品属性时的配置项
下面的列表是MagentoEavSetupEavSetup::addAttribute的参考项,它提供了创建产品属性时的可选的项,列出了每个可选项的键值,描述,默认值。

Key

Description

Default Value

apply_to

Catalog EAV Attribute apply_to

 

attribute_model

EAV Attribute attribute_model

 

attribute_set

Name of the attribute set the new attribute will be assigned to. Works in combination with group or empty user_defined

 

backend

EAV Attribute backend_model

 

comparable

Catalog EAV Attribute is_comparable

0

default

EAV Attribute default_value

 

filterable_in_search

Catalog EAV Attribute is_filterable_in_search

0

filterable

Catalog EAV Attribute is_filterable

0

frontend_class

EAV Attribute frontend_class

 

frontend

EAV Attribute frontend_model

 

global

Catalog EAV Attribute is_global field

1

group

Attribute group name or ID

 

input_renderer

Catalog EAV Attribute frontend_input_renderer

 

input

EAV Attribute frontend_input

text

is_filterable_in_grid

Catalog EAV Attribute is_filterable_in_grid

0

is_html_allowed_on_front

Catalog EAV Attribute is_html_allowed_on_front

0

is_used_in_grid

Catalog EAV Attribute is_used_in_grid field

0

is_visible_in_grid

Catalog EAV Attribute is_visible_in_grid field

0

label

EAV Attribute frontend_label

 

note

EAV Attribute note

 

option

EAV Attribute Option values

 

position

Catalog EAV Attribute position

0

required

EAV Attribute is_required

1

searchable

Catalog EAV Attribute is_searchable

0

sort_order

EAV Entity Attribute sort_order

 

source

EAV Attribute source_model

 

table

EAV Attribute backend_table

 

type

EAV Attribute backend_type

varchar

unique

EAV Attribute is_unique

0

used_for_promo_rules

Catalog EAV Attribute is_used_for_promo_rules

0

used_for_sort_by

Catalog EAV Attribute used_for_sort_by

0

used_in_product_listing

Catalog EAV Attribute used_in_product_listing

0

user_defined

EAV Attribute is_user_defined

0

visible_in_advanced_search

Catalog EAV Attribute is_visible_in_advanced_search

0

visible_on_front

Catalog EAV Attribute is_visible_on_front

0

visible

Catalog EAV Attribute is_visible

1

wysiwyg_enabled

Catalog EAV Attribute is_wysiwyg_enabled

0

以上是 Magento2EAVandextensionattributes 的全部内容, 来源链接: utcz.com/z/510874.html

回到顶部