Jak dodać nowy typ produktu w Magento 2? (Tajemnicze pytanie MageStackDay 1)

40

Pytanie bonusowe MageStackDay za 500 punktów Bounty O możliwość wygrania bezpłatnej licencji Z-Ray na rok. Więcej informacji można znaleźć >> tutaj <<

Odpowiedzi na pytania udzielił główny programista Magento 2, Anton Kril.

Pytanie:

Chcę dodać nowy typ produktu do Magento. Jak mógłbym to zrobić w wersji beta deweloperów Magento 2

Sander Mangel
źródło

Odpowiedzi:

40

Aby dodać nowy typ produktu w Magento 2, musisz utworzyć plik etc / product_types.xml w swoim module. W tym pliku określasz:

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

Następnie utwórz 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)
    {
    }
}

Spowoduje to dodanie nowego typu produktu i teraz możesz go wybrać podczas tworzenia nowego produktu w backend.

Opcja produktu demonstracyjnego

W pliku product_type.xml można również określić własny indeksator lub metodę obliczania ceny. Aby uzyskać więcej przykładów, zobacz kod dla typów produktów Pakiet, Produkt konfiguracyjny, Produkt do pobrania i Produkt zgrupowany.

Aby zobaczyć pełne rozszerzenie produktu demonstracyjnego, zobacz: https://github.com/Genmato/DemoProduct

EDYTOWAĆ:

Zgodnie z prośbą Anton trochę dodatkowej funkcjonalności dla nowego typu produktu (jeśli w tym tygodniu będę miał trochę więcej czasu, postaram się wprowadzić dodatkowe modyfikacje).

Na razie zaktualizowałem typ produktu demonstracyjnego o pole wprowadzania ceny dla atrybutu kosztu: Atrybut kosztu własnego

Ten atrybut kosztu służy do obliczania ceny, gdy jest wyświetlany w interfejsie użytkownika (atrybut ceny jest niedostępny i nie jest używany). W tym przykładzie użyłem kosztu * 1,25 (w Genmato \ DemoProduct \ Model \ Product \ Type \ Demo \ Price): Obliczanie ceny

Wynik w interfejsie: Wynik nakładki

Pełny zaktualizowany kod jest dostępny na stronie : https://github.com/Genmato/DemoProduct

Vladimir Kerkhoff
źródło
Po prostu dodając samouczek do swojej odpowiedzi, mam nadzieję, że dostaniesz nagrodę! Dostępny jest pełny samouczek na temat tworzenia nowych typów produktów: vimeo.com/116810487 Zobacz dokumentację tutaj: devdocs.magento.com
JoeyH
4
Byłoby wspaniale, gdybyś dodał co najmniej kilka punktów dostosowywania (renderowanie, obliczanie ceny itp.)
Anton Kril
1
@Anton: Zaktualizowałem typ produktu demonstracyjnego za pomocą prostej kalkulacji ceny na podstawie atrybutu kosztu. Jeśli mam trochę więcej czasu, w ciągu kilku następnych dni postaram się dodać kilka innych modyfikacji.
Vladimir Kerkhoff
Jak to rozszerzyć, aby utworzyć złożony typ produktu, taki jak produkt zgrupowany?
Sukeshini,