Если стандартных полей в Свойствах товара магазина 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) и вы увидите только новые поля.