Como adicionar um novo tipo de produto no Magento 2? (Questão de mistério 1 do MageStackDay)

40

Pergunta de bônus do MageStackDay para 500pts Bounty E a possibilidade de ganhar uma licença Z-Ray gratuita por um ano. Mais informações podem ser encontradas >> aqui <<

As perguntas são fornecidas pelo desenvolvedor principal do Magento 2, Anton Kril.

Questão:

Quero adicionar um novo tipo de produto ao Magento. Como eu faria isso no Magento 2 dev beta

Sander Mangel
fonte

Respostas:

40

Para adicionar um novo tipo de produto no Magento 2, você precisa criar um etc / product_types.xml no seu módulo. Neste arquivo você 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>

Em seguida, crie o 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)
    {
    }
}

Isso adicionará o novo tipo de produto e agora você pode selecioná-lo ao criar um novo produto no back-end.

Opção de demonstração do produto

No product_type.xml, também é possível especificar seu próprio indexador ou método de cálculo de preço. Para obter mais exemplos, consulte o código dos tipos de produto Bundle, ConfigureProduct, Downloadable e GroupedProduct.

Para a extensão completa do produto demo, consulte: https://github.com/Genmato/DemoProduct

EDITAR:

Conforme solicitado por Anton, uma funcionalidade extra para o novo tipo de produto (se eu tiver um pouco mais de tempo nesta semana, tentarei fazer algumas modificações extras).

Por enquanto, atualizei o tipo de produto de demonstração com um campo de entrada de preço para o atributo de custo: Atributo preço de custo

Esse atributo de custo é usado para calcular o preço quando é exibido no front-end (o atributo price não está disponível e não é usado). Neste exemplo, usei o custo * 1,25 (em Genmato \ DemoProduct \ Model \ Product \ Type \ Demo \ Price): Cálculo de preço

O resultado no frontend: Resultado de front-end

O código atualizado completo está disponível em: https://github.com/Genmato/DemoProduct

Vladimir Kerkhoff
fonte
Apenas adicionando um tutorial à sua resposta, espero que você receba a recompensa! Há um tutorial completo sobre a criação de novos tipos de produtos localizados: vimeo.com/116810487 Ver a documentação aqui: devdocs.magento.com
JoeyH
4
Seria ótimo se você adicionou em alguns pontos menos de personalização (processamento, cálculo de preço, etc)
Anton Kril
11
@Anton: atualizei o tipo de produto de demonstração com um cálculo de preço simples com base no atributo de custo. Se eu tiver um pouco mais de tempo nos próximos dias, tentarei adicionar outras modificações.
Vladimir Kerkhoff
Como estender isso para criar um tipo de produto composto, como um produto agrupado?
Sukeshini 9/09/16