magento2 产品customizable options 添加自定义字段

最近有个需求,需要在customizable options里面添加一个自定义输入框,供业务填写属性注释等内容,安排。。。
实际使用中,将vendor和module 改成对应文件夹路径即可

实际效果图:


0622】.png

首先往 catalog_product_option表中添加字段,因为我要兼容中英文,所以加了两个字段,笨办法,但是简单好用

app/code/vendor/module/etc/module.xml 升级模块版本,根据实际情况修改 我这里版本1.0.5

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="vendor_module" setup_version="1.0.5" />
</config>

app\code\vendor\module\Setup\UpgradeSchema.php


public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
 // 更新表 [catalog_product_option] 字段 添加option title备注提示信息
        if (version_compare($context->getVersion(), '1.0.5', '<'))
        {
            $this->addFieldToProductOption($setup);
        }
    }
private function addFieldToProductOption(SchemaSetupInterface $setup)
    {
        $optionsManageTable = $setup->getTable('catalog_product_option');
        $optionsConnection  = $setup->getConnection();

        if ($optionsConnection->isTableExists($optionsManageTable) == true)
        {
            $optionsConnection->addColumn($optionsManageTable, 'option_msg', [
                'type'      => Table::TYPE_TEXT,
                'nullable'  => true,
                'default'  => null,
                'comment'   => 'option_msg 中文'
            ]);
            $optionsConnection->addColumn($optionsManageTable, 'option_msg_en', [
                'type'      => Table::TYPE_TEXT,
                'nullable'  => true,
                'default'  => null,
                'comment'   => 'option_msg 英文'
            ]);
        }

        unset($optionsManageTable, $optionsConnection);
    }

编辑di.xml

app/code/vendor/module/etc/adminhtml/di.xml

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     
    <type name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions">
        <plugin name="vendor_module_Plugin_Magento_Catalog_Ui_DataProvider_Product_Form_Modifier_CustomOptions" type="vendor\module\Plugin\Product\Options" sortOrder="10" disabled="false"/>
    </type>

</config>

添加plugin文件

app/code/vendor/module/Plugin/Product/Options.php

<?php
declare(strict_types=1);

namespace vendor\module\Plugin\Product;

use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\AbstractModifier;
use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions;
use Magento\Ui\Component\Form\Element\Input;
use Magento\Ui\Component\Form\Element\DataType\Number;
use Magento\Ui\Component\Form\Field;

class Options
{
    /**
     * @var array
     */
    protected $meta = [];

    public function aroundModifyMeta(
        CustomOptions $subject,
        \Closure $proceed,
        $meta
    ) {
        \Magento\Framework\App\ObjectManager::getInstance()->get('Psr\Log\LoggerInterface')->info('aroundModifyMeta Plugin2' );

        $this->meta = $proceed($meta);
        $this->addFields();

        return $this->meta;
    }


    /**
     * Adds fields to the meta-data
     */
    protected function addFields()
    {

        $groupCustomOptionsName    = CustomOptions::GROUP_CUSTOM_OPTIONS_NAME;
        $optionContainerName       = CustomOptions::CONTAINER_OPTION;
        $commonOptionContainerName = CustomOptions::CONTAINER_COMMON_NAME;

        // Add fields to the option
        $optionFeaturesFields  = $this->getOptionGtinFieldsConfig();

        $this->meta[$groupCustomOptionsName]['children']['options']['children']['record']['children']
        [$optionContainerName]['children'][$commonOptionContainerName]['children'] = array_replace_recursive(
            $this->meta[$groupCustomOptionsName]['children']['options']['children']['record']['children']
            [$optionContainerName]['children'][$commonOptionContainerName]['children'],
            $optionFeaturesFields
        );

    }

    /**
     * The custom option fields config
     *
     * @return array
     */
    protected function getOptionGtinFieldsConfig()
    {
        $fields['gtin'] = $this->getGtinFieldConfig();

        return $fields;
    }

    /**
     * Get gtin field config
     *
     * @return array
     */
    protected function getGtinFieldConfig()
    {
        $storeId = \Magento\Framework\App\ObjectManager::getInstance()->get('\Magento\Store\Model\StoreManagerInterface')->getStore()->getId();
//        \Magento\Framework\App\ObjectManager::getInstance()->get('Psr\Log\LoggerInterface')->info('当前storeID' .$storeId);
        $dataScope = in_array($storeId, [0,1]) ? 'option_msg' : 'option_msg_en';//如果是默认视图,取中文,否则取英文字段
        return [
            'arguments' => [
                'data' => [
                    'config' => [
                        'label'         => __('Option Msg'),
                        'componentType' => Field::NAME,
                        'formElement'   => Input::NAME,
                        'dataType'      => Number::NAME,
                        'dataScope'     => $dataScope,
                        'sortOrder'     => 65
                    ],
                ],
            ],
        ];
    }

    /**
     * Check is current modifier for the product only
     *
     * @return bool
     */
    public function isProductScopeOnly()
    {
        return false;
    }

    /**
     * Get sort order of modifier to load modifiers in the right order
     *
     * @return int
     */
    public function getSortOrder()
    {
        return 32;
    }
}

(完)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容