Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Semdevmaster/bfc086f4311d5e48152af5b0df68216f to your computer and use it in GitHub Desktop.
Save Semdevmaster/bfc086f4311d5e48152af5b0df68216f to your computer and use it in GitHub Desktop.
https://modx.pro/solutions/10040-add-your-fields-in-the-order-form/
https://dart.agency/blog/modx/kak-dobavit-dopolnitelnoe-pole-k-zakazu-v-minishop2.html
https://modx.pro/solutions/7037-expanding-any-table-modx/#comment-84315
Инструкция:
1)В системных настройках добавляем свои поля в ms2_order_address_fields
2)Создаём плагин на событие OnMODXInit для расширения модели БД
<?php
switch ($modx->event->name) {
case 'OnMODXInit':
$modx->loadClass('msOrderAddress');
$modx->map['msOrderAddress']['fields']['orderTime'] = NULL;
$modx->map['msOrderAddress']['fieldMeta']['orderTime'] = array(
'dbtype'=>'varchar',
'precision'=>'255',
'phptype'=>'string',
'null'=>true
);
break;
}
3)Можно в этом же плагине ещё одно событие добавить msOnManagerCustomCssJs, в нём мы переопределяем нужный функционал
ExtJs компонентов, для этого используем метод Ext.override(object,{})
Пример:
<?php
switch ($modx->event->name) {
case 'msOnManagerCustomCssJs':
if ($page != 'orders') return;
$modx->controller->addHtml("
<script type='text/javascript'>
Ext.override(miniShop2.window.UpdateOrder, {
getAddressFields: function (config) {
var all = {
receiver: {},
phone: {},
index: {},
country: {},
region: {},
building: {},
city: {},
street: {},
room: {},
managerid: {},
};
var fields = [], tmp = [];
for (var i = 0; i < miniShop2.config['order_address_fields'].length; i++) {
var field = miniShop2.config['order_address_fields'][i];
if (all[field]) {
Ext.applyIf(all[field], {
xtype: 'textfield',
name: 'addr_' + field,
fieldLabel: _('ms2_' + field)
});
all[field].anchor = '100%';
tmp.push(all[field]);
}
}
var addx = function (w1, w2) {
if (!w1) {
w1 = .5;
}
if (!w2) {
w2 = .5;
}
return {
layout: 'column',
defaults: {msgTarget: 'under', border: false},
items: [
{columnWidth: w1, layout: 'form', items: []},
{columnWidth: w2, layout: 'form', items: []}
]
};
};
var n;
if (tmp.length > 0) {
for (i = 0; i < tmp.length; i++) {
if (i == 0) fields.push(addx(.7, .3));
else if (i == 2) fields.push(addx(.3, .7));
else if (i % 2 == 0) fields.push(addx());
if (i <= 1) {
n = 0;
}
else {
n = Math.floor(i / 2);
}
fields[n].items[i % 2].items.push(tmp[i]);
}
if (miniShop2.config['order_address_fields'].in_array('orderTime')) {
fields.push(
{
xtype: 'timefield',
name: 'addr_orderTime',
fieldLabel: _('ms2_orderTime'),
anchor: '50%',
format:'H:i'
}
);
}
if (miniShop2.config['order_address_fields'].in_array('comment')) {
fields.push(
{
xtype: 'displayfield',
name: 'addr_comment',
fieldLabel: _('ms2_comment'),
anchor: '98%',
style: 'min-height: 50px;border:1px solid #efefef;width:95%;'
}
);
}
}
return fields;
}
});
</script>");
break;
}
4)Создаём поля в БД
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment