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.

Revisions

  1. Semdevmaster created this gist Aug 23, 2017.
    124 changes: 124 additions & 0 deletions Свои поля в заказе miniShop2
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,124 @@
    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)Создаём поля в БД