基於模塊的自定義商品開發研究

目標:
1.  自定義字段。
2.  啓用新商品類型簡化商品屬性。
3.  可以對接自定義商品後續處理過程。
參考:Magento_Downloadable 模塊
博文狀態:持續編輯中...

簡單教程:經過模塊開發自定義商品類型

忽略部分,如何建立一個模塊,並啓用(這個部分能夠看個人其它博文)。

關鍵過程:php

1. 建立 MODULE/etc/product_types.xml, 內容可參考Magento_Downloadable.
2. 在該XML文件中,須要指定「modelInstance」 這個是定製商品類型的「類型實例」(在Magento2.x系統中,商品服務、商品Model、商品內容類型Model都各不相同,商品的內容類型Model就是「類型實例」)。
3. modelInstance="YOURVENDORYOURMODULEModelProductType"基本內容:
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Mdu\Service\Model\Product;


use \Magento\Catalog\Api\ProductRepositoryInterface;
use \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface;

/**
 * Downloadable product type model
 *
 * @api
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 * @since 100.0.2
 */
class Type extends \Magento\Catalog\Model\Product\Type\Virtual{
    
}

能夠看到我整篇代碼複製Downloadable模塊下面的,只自定義了一下namespace.這樣就能夠了。api

4. 更新代碼,更新Magento緩存,服務器命令行執行:

php -f Magento_ROOT/bin/magento setup:upgrade緩存

5. 結果,這時你在後臺添加商品時已經能夠選擇剛剛建立的商品類型。以下圖:

圖片描述

完成,剩下的是自定義字段部分。服務器

代碼跟蹤與研究過程

<!-- 這個是MODULE/etc/product_types.xml 商品類型添加核心文件 -->
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Catalog:etc/product_types.xsd">
    <type name="downloadable" label="Downloadable Product" modelInstance="Magento\Downloadable\Model\Product\Type" composite="false" isQty="true" canUseQtyDecimals="false" sortOrder="60">
        <priceModel instance="Magento\Downloadable\Model\Product\Price" />
        <indexerModel instance="Magento\Downloadable\Model\ResourceModel\Indexer\Price" />
        <customAttributes>
            <attribute name="refundable" value="false"/>
            <attribute name="is_real_product" value="false"/>
        </customAttributes>
    </type>
    <composableTypes>
        <type name="downloadable" />
    </composableTypes>
</config>

其中: modelInstance="MagentoDownloadableModelProductType" 這個是重點,Magento系統的模塊結構有些混亂,架構和業務模塊,至少在目錄結構級別是混合的。
在商品類型定義這裏,系統依然是直接對接 Magento_Catalog/Product, 進而由這個Model來對接自定義商品相關操做。架構

吐槽一下:Magento2.x 的Model體系使用有些混亂,兼顧數據模型、業務服務、甚至還包括一些模版渲染的工做。

下面是代碼跟蹤測試記錄:
圖片描述
執行結果:測試

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 [2018-03-23 02:35:05]  Magento\Catalog\Model\Product::getAttributes - 813 
 127.0.0.1 
----------
 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
string(39) "Magento\Downloadable\Model\Product\Type"
相關文章
相關標籤/搜索