¿Cómo agregar un nuevo tipo de producto en Magento 2? (MageStackDay pregunta misteriosa 1)

40

Pregunta de bonificación MageStackDay para 500pts Bounty Y la posibilidad de ganar una licencia gratuita de Z-Ray por un año. Más información se puede encontrar >> aquí <<

Las preguntas son proporcionadas por el desarrollador principal de Magento 2, Anton Kril.

Pregunta:

Quiero agregar un nuevo tipo de producto a Magento. ¿Cómo haría para hacer esto en Magento 2 dev beta

Sander Mangel
fuente

Respuestas:

40

Para agregar un nuevo tipo de producto en Magento 2, debe crear un etc / product_types.xml en su módulo. En este archivo usted especifica:

<?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>

Luego cree el modelInstance:

/**
 * @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)
    {
    }
}

Esto agregará el nuevo tipo de producto y ahora puede seleccionarlo al crear un nuevo producto en el back-end.

Opción de producto de demostración

En product_type.xml también es posible especificar su propio indexador o método de cálculo de precios; para obtener más ejemplos, consulte el código de los tipos de productos Bundle, ConfigureProduct, Downloadable y GroupedProduct.

Para ver la extensión completa del producto de demostración, consulte: https://github.com/Genmato/DemoProduct

EDITAR:

Según lo solicitado por Anton, un poco más de funcionalidad para el nuevo tipo de producto (si tengo un poco más de tiempo esta semana, intentaré algunas modificaciones adicionales).

Por ahora actualicé el tipo de Producto de demostración con un campo de entrada de precio para el atributo de costo: Atributo de precio de costo

Este atributo de costo se usa para calcular el precio cuando se muestra en la interfaz (el atributo de precio no está disponible y no se usa). Para este ejemplo, utilicé el costo * 1.25 (en Genmato \ DemoProduct \ Model \ Product \ Type \ Demo \ Price): Cálculo del precio

El resultado en la interfaz: Resultado frontend

El código actualizado completo está disponible en: https://github.com/Genmato/DemoProduct

Vladimir Kerkhoff
fuente
Solo agregue un tutorial a su respuesta, ¡espero que obtenga la recompensa! Hay un tutorial completo sobre cómo crear nuevos tipos de productos: vimeo.com/116810487 Vea la documentación aquí: devdocs.magento.com
JoeyH
44
Sería genial si agregara al menos algunos puntos de personalización (renderizado, cálculo de precios, etc.)
Anton Kril
1
@Anton: Actualicé el tipo de Producto de demostración con un cálculo de precio simple basado en el atributo de costo. Si tengo un poco más de tiempo los próximos días, intentaré agregar algunas otras modificaciones.
Vladimir Kerkhoff
¿Cómo extender esto para crear un tipo de producto compuesto como un producto agrupado?
Sukeshini