目標: 1. 自定義字段。 2. 啓用新商品類型簡化商品屬性。 3. 可以對接自定義商品後續處理過程。
參考:Magento_Downloadable 模塊
博文狀態:持續編輯中...
忽略部分,如何建立一個模塊,並啓用(這個部分能夠看個人其它博文)。
關鍵過程:php
<?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
php -f Magento_ROOT/bin/magento setup:upgrade緩存
完成,剩下的是自定義字段部分。服務器
<!-- 這個是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"