Как добавить новый тип продукта в Magento 2? (MageStackDay, загадочный вопрос 1)

40

Бонусный вопрос MageStackDay для 500 Bounty И возможность выиграть бесплатную лицензию Z-Ray в течение года. Более подробную информацию можно найти здесь >>

Вопросы предоставлены основным разработчиком Magento 2 Антоном Крылом.

Вопрос:

Я хочу добавить новый тип продукта в Magento. Как бы я поступил в Magento 2 dev beta?

Сандер Мангель
источник

Ответы:

40

Для добавления нового типа продукта в 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>

Затем создайте экземпляр модели:

/**
 * @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

РЕДАКТИРОВАТЬ:

По просьбе Антона немного дополнительной функциональности для нового типа продукта (если у меня будет немного больше времени на этой неделе, я постараюсь внести некоторые дополнительные изменения).

На данный момент я обновил тип демонстрационного продукта полем ввода цены для атрибута стоимости: Атрибут себестоимости

Этот атрибут стоимости используется для расчета цены, когда он отображается во внешнем интерфейсе (атрибут цены недоступен и не используется). Для этого примера я использовал стоимость * 1,25 (в Genmato \ DemoProduct \ Model \ Product \ Type \ Demo \ Price): Расчет цены

Результат на интерфейсе: Фронтенд результат

Полный обновленный код доступен по адресу : https://github.com/Genmato/DemoProduct.

Владимир Керхофф
источник
Просто добавив учебник к вашему ответу, надеюсь, вы получите награду! Полное руководство по созданию новых типов продуктов находится по адресу: vimeo.com/116810487. См. Документацию здесь: devdocs.magento.com
JoeyH,
4
Было бы здорово, если бы вы добавили хотя бы несколько точек настройки (рендеринг, расчет цены и т. Д.)
Антон Криль
1
@Anton: я обновил тип демонстрационного продукта с простым расчетом цены на основе атрибута стоимости. Если у меня будет немного больше времени на следующие несколько дней, я постараюсь добавить некоторые другие модификации.
Владимир Керхофф
Как расширить это, чтобы создать составной тип продукта, такой как сгруппированный продукт?
Sukeshini