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.
12
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
<?phpnamespace 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的参考项,它提供了创建产品属性时的可选的项,列出了每个可选项的键值,描述,默认值。
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