Объединение свойств и опций товара в админ-панели

Здраствуйте! Подскажите как можно сгруппировать все свойства и опции товара в одной вкладке? Например как с tv-параметрами там можно в регионах выставить нужную вкладку, есть ли возможность сделать аналогично с свойствами и опциями?
На скриншоте наглядно показано то, о чем я говорю:
Вячеслав Варов
30 июля 2018, 07:24
modx.pro
2
1 525
0

Комментарии: 3

Денис
30 июля 2018, 13:27
1
+3
Сделайте что то вроде такого.
Создайте файл в /assets/components/minishop2/js/mgr/product и назовите его product.extends.js

Ext.override(miniShop2.panel.Product,{
    getFields: function (config) {
        var fields = [];
        var originals = MODx.panel.Resource.prototype.getFields.call(this, config);

        for (var i in originals) {
            if (!originals.hasOwnProperty(i)) {
                continue;
            }
            var item = originals[i];
            if (item.id == 'modx-resource-header') {
                item.html = '<h2>' + _('ms2_product_new') + '</h2>';
            }
            else if (item.id == 'modx-resource-tabs') {
                item.stateful = MODx.config['ms2_product_remember_tabs'] == 1;
                item.stateId = 'minishop2-product-' + config.mode + '-tabpanel';
                item.stateEvents = ['tabchange'];
                item.collapsible = false;
                item.getState = function () {
                    return {activeTab: this.items.indexOf(this.getActiveTab())};
                };

                var product = [];
                var other = [];

                for (var i2 in item.items) {
                    if (!item.items.hasOwnProperty(i2)) {
                        continue;
                    }
                    var tab = item.items[i2];
                    switch (tab.id) {
                        case 'modx-resource-settings':
                            tab.items.push(this.getContent(config));
                            product.push(tab);
                            break;
                        case 'modx-page-settings':
                            tab.items = this.getProductSettings(config);
                            product.push(tab);

                            if(miniShop2.config['show_extra'] || miniShop2.config['show_options']) {
                                var copositeOptions;
                                copositeOptions = this.getProductFields(config);
                                if (!miniShop2.config['show_extra']) {
                                    copositeOptions.items = [];
                                }
                                if (miniShop2.config['show_options']) {
                                    var options = this.getProductOptions(config);
                                    if (options) {
                                        copositeOptions.items = copositeOptions.items.concat([{ title: options.title, style: "margin-top:30px;" }],options.items);
                                    }
                                }
                                product.push(copositeOptions);
                            }

                            if (config.mode == 'update' && miniShop2.config['show_links']) {
                                product.push(this.getProductLinks(config));
                            }
                            if (miniShop2.config['show_categories']) {
                                product.push(this.getProductCategories(config));
                            }
                            break;
                        default:
                            other.push(tab);
                    }
                }

                var tabs = [{
                    title: _('ms2_tab_product'),
                    cls: 'panel-wrapper',
                    id: 'minishop2-product-tab',
                    items: [{
                        xtype: 'modx-tabs',
                        id: 'minishop2-product-tabs',
                        stateful: MODx.config['ms2_product_remember_tabs'] == 1,
                        stateId: 'minishop2-product-' + config.mode + '-tabpanel-product',
                        stateEvents: ['tabchange'],
                        getState: function () {
                            return {activeTab: this.items.indexOf(this.getActiveTab())};
                        },
                        deferredRender: false,
                        items: product,
                        resource: config.resource,
                        border: false,
                        listeners: {},
                    }]
                }];

                item.items = tabs.concat(other);
            }
            if (item.id != 'modx-resource-content') {
                fields.push(item);
            }
        }

        return fields;
    },
});

Так же создайте плагин и привяжите его к событию OnDocFormPrerender
<?php
switch ($modx->event->name) {
	case 'OnDocFormPrerender':
	    if($modx->controller->resourceArray['class_key'] == 'msProduct'){
	        if ($miniShop2 = $modx->getService('miniShop2')) {
    	            $modx->controller->addLastJavascript($miniShop2->config['jsUrl'].'mgr/product/product.extends.js');
	        }
	    }
        break;
}

Получится как то так:
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
3