Новое поле в Свойствах товара minishop2

Если стандартных полей в Свойствах товара магазина 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 столбца:

  • newarticle
  • newprice

скрин из phpMyAdmin:

index.php

<?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 файл для рендеринга полей в панели администратора.

msproductdata.map.inc.php

файл с картой 

<?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 — Индексы. Если поле не является индексным, то здесь его можно не указывать.

msproductdata.js

Этот файл отвечает за отображения полей в админке. 

Параметр 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) и вы увидите только новые поля.