Если стандартных полей в Свойствах товара магазина MS2 не хватает, создаем 3 файла, их путь:
core/components/minishop2/plugins/plugin/index.php
core/components/minishop2/plugins/plugin/msproductdata.map.inc.php
assets/components/minishop2/plugins/plugin/msproductdata.js
plugin – это название нашего плагина, вы можете поменять его на свое
Далее создаем столбцы в базе данных в таблице [prefix]ms2_products. Сделать вы это можете с помощью phpMyAdmin. 2 столбца:
скрин из phpMyAdmin:

<?php
return array(
'map' => array(
'msProductData' => require_once 'msproductdata.map.inc.php',
),
'manager' => array(
'msProductData' => MODX_ASSETS_URL . 'components/minishop2/plugins/plugin/msproductdata.js',
),
);
map – указатель на файл с картой наших полей,
manager – указатель на JS файл для рендеринга полей в панели администратора.
файл с картой
<?php
return array(
'fields' => array (
'newarticle' => 1,
'newprice' => 0.0
),
'fieldMeta' => array (
'newarticle' =>
array (
'dbtype' => 'varchar',
'precision' => '50',
'phptype' => 'integer',
'null' => true,
),
'newprice' =>
array (
'dbtype' => 'decimal',
'precision' => '12,2',
'phptype' => 'float',
'null' => true,
'default' => 0.0,
),
)
,'indexes' => array(
'newarticle' =>
array (
'alias' => 'newarticle',
'primary' => false,
'unique' => false,
'type' => 'BTREE',
'columns' =>
array (
'newarticle' =>
array (
'length' => '',
'collation' => 'A',
'null' => false,
),
),
),
'newprice' =>
array (
'alias' => 'newprice',
'primary' => false,
'unique' => false,
'type' => 'BTREE',
'columns' =>
array (
'newprice' =>
array (
'length' => '',
'collation' => 'A',
'null' => false,
),
),
),
)
);
Описываем базовые настройки новых полей.
Здесь: fields — значение по-умолчанию для поля
fieldMeta — Meta-описание поля. Будьте внимательны.
indexes — Индексы. Если поле не является индексным, то здесь его можно не указывать.
Этот файл отвечает за отображения полей в админке.
Параметр xtype у полей отвечает за тип отображения, поэтому вам нужно просто выбрать тот или иной xtype.
Не забывайте менять названия полей на свои в коде:
miniShop2.plugin.pluginname = { //pluginname не меняем.
getFields: function(config) {
return {
newarticle: {
xtype: 'textfield'
,description: '
' + _('ms2_product_newarticle_help')
},
newprice: {
xtype: 'numberfield',
decimalPrecision: 2,
description: '
' + _('ms2_product_newprice_help')
},
}
}
,getColumns: function() {
return {
newarticle: {width:50, sortable:false, editor: {xtype:'textfield'}},
newprice: {width:50, sortable:false, editor: {xtype: 'numberfield'}}, }
}
};
Если вместо обычного текстового поля необходим выпадающий список
то xtype должен быть combo-newarticle
Пример:
miniShop2.plugin.pluginname = { //pluginname не меняем.
getFields: function(config) {
return {
newarticle: {
xtype: 'combo-newarticle'
,name: 'avaible'
,hiddenName: 'avaible'
,description: '
' + _('ms2_product_newarticle_help')
},
newprice: {
xtype: 'numberfield',
decimalPrecision: 2,
description: '
' + _('ms2_product_newprice_help')
},
}
}
,getColumns: function() {
return {
newarticle: {width:50, sortable:false, editor: {xtype:'combo-newarticle', renderer: 'true'}},
newprice: {width:50, sortable:false, editor: {xtype: 'numberfield'}}, }
}
};
Для выпадающего списка в этом файле нужен еще код:
miniShop2.combo.newarticle = function(config) {
config = config || {};
Ext.applyIf(config,{
store: new Ext.data.ArrayStore({
id: 0
,fields: ['newarticle','display']
,data: [
['1','1 пункт']
,['2','2 пункт']
,['3','3 пункт']
]
})
,mode: 'local'
,displayField: 'display'
,valueField: 'newarticle'
});
miniShop2.combo.newarticle.superclass.constructor.call(this,config);
};
Ext.extend(miniShop2.combo.newarticle,MODx.combo.ComboBox);
Ext.reg('combo-newarticle',miniShop2.combo.newarticle);
Для создания переводов надо зайти в Управление словарями -> minishop2 -> ru
и создать 2 ключа по шаблону ms2_product_FIELDNAME и 2 ключа по шаблону ms2_product_FIELDNAME_help.
Первые 2 это заголовки полей, а другие строки описания.
Сделать это можно перейдя в Настройки системы -> minisop2 -> Товар -> Дополнительные поля товара (ms2_product_extra_fields) и добавив в конец через запятую имена двух полей.
После этого зайти в карточку товара - обязательно сбросить кеш (ctrl+F5) и вы увидите только новые поля.