在 Magento2 中,支持创建新的产品类型。默认有五个产品类型:简单产品,可配置产品,绑定产品,虚拟产品和可下载产品。然而,在某些情况下,现有产品类型不能满足需求,同时,你的产品也不符合现有的产品类型。这也是本文需要解决的问题。
概览
- 第一步,生成 registration.php 文件;
- 第二步,添加 NewProductType 模型代码;
- 第三步,添加价格模型;
- 第四步,发部新产品类型。
第一步,生成 registration.php 文件
- 新建文件 app\code\Mageplaza\HelloWorld\registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Mageplaza_HelloWorld',
__DIR__
);
- 创建 app\code\Mageplaza\HelloWorld\etc\module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Mageplaza_HelloWorld" setup_version="1.0.0">
</module>
</config>
- 创建决定新产品类型模型的文件 etc/product_types.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Catalog:etc/product_types.xsd">
<type name="new_product_type" label="New Product Type" modelInstance="Mageplaza\HelloWorld\Model\Product\Type\NewProductType" indexPriority="60" sortOrder="80" isQty="true">
<priceModel instance="Mageplaza\HelloWorld\Model\Product\Price" />
</type>
</config>
注意:
- name:新产品类型的名字
- label:展示在 Magento 后台的标签
- modelInstance:产品类型的属性
- priceModel:新产品的价格
第二步,添加 NewProductType 模型代码
- 在文件 Mageplaza\HelloWorld\Model\Product\Type\NewProductType model 中添加以下代码
<?php
namespace Mageplaza\HelloWorld\Model\Product\Type;
class NewProductType extends \Magento\Catalog\Model\Product\Type\AbstractType {
}
- 接下来就可以重新一些方法,并且可以做出你想要的改变
第三步,添加价格模型
- 基于 Magento\Catalog\Model\Product\Type\Price 新建模型(model) Mageplaza\HelloWorld\Model\Product\Price
<?php
namespace Mageplaza\HelloWorld\Model\Product;
class Price extends \Magento\Catalog\Model\Product\Type\Price
{
}
- 在扩展了类 Magento\Catalog\Model\Product\Type\Price 之后,还可以通过一些自定义方法把新的产品类型设置为通用类型
第四步,发部新产品类型
完成以上步骤后,可以去 Magento 后台进行查看。新的产品类型会跟默认产品类型展示到一起。