Для додавання нового типу продукту в Magento 2 вам потрібно створити etc / product_types.xml у своєму модулі. У цьому файлі ви вказуєте:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../Catalog/etc/product_types.xsd">
<type name="demoproduct" label="Demo Product" modelInstance="Genmato\DemoProduct\Model\Product\Type\Demo" indexPriority="25" sortOrder="25">
<customAttributes>
<attribute name="refundable" value="true"/>
</customAttributes>
</type>
</config>
Потім створіть модельInstance:
/**
* @category Genmato
* @package Genmato_MageStackProduct
* @copyright Copyright (c) 2015 Genmato BV (https://genmato.com)
*/
namespace Genmato\DemoProduct\Model\Product\Type;
class Demo extends \Magento\Catalog\Model\Product\Type\AbstractType
{
/**
* Delete data specific for Simple product type
*
* @param \Magento\Catalog\Model\Product $product
* @return void
*/
public function deleteTypeSpecificData(\Magento\Catalog\Model\Product $product)
{
}
}
Це додасть новий тип продукту, і тепер ви можете обрати це під час створення нового продукту в резервному часі.
У product_type.xml також можна вказати власний метод індексатора чи розрахунку ціни, для отримання додаткових прикладів див. Код для типів продуктів Bundle, ConfigureProduct, Downloadable та GroupedProduct.
Повне розширення демо-продукту див. На веб-сайті : https://github.com/Genmato/DemoProduct
Редагувати:
Як вимагає Антон, трохи додаткової функціональності для нового типу товару (Якщо у мене на цьому тижні трохи більше часу, я спробую внести деякі додаткові модифікації).
Наразі я оновив тип продукту Demo з полем для введення ціни на атрибут вартості:
Цей атрибут вартості використовується для обчислення ціни, коли він відображається на фронті (ціновий атрибут недоступний і не використовується). Для цього прикладу я використав вартість * 1,25 (у Genmato \ DemoProduct \ Model \ Product \ Type \ Demo \ Price):
Результат на фронті:
Повний оновлений код доступний на веб- сайті: https://github.com/Genmato/DemoProduct