Как добавить поле галочку в заказ любой, а потом изменять её плагином?

Нужно добавить в каждый заказ, чекбокс, и потом допустим при заказе если это более 5 заказ, в текущем и каждом последующем заказе указывать данный чекбокс как активный для этого пользователя.

Пытался так:

<?php
switch ($modx->event->name) {

	case 'OnMODXInit':
		$modx->loadClass('msOrder');
		$modx->map['msOrder']['fields']['regular_customer'] = 0;
		$modx->map['msOrder']['fieldMeta']['regular_customer'] = array(
			'dbtype' => 'tinyint',
			'precision' => 1,
			'attributes' => 'unsigned',
			'phptype' => 'boolean',
			'null' => false,
			'default' => 0,
		);
		break;
}
П.С ставил на событие «OnMODXInit»

Так же создал само поле в базе данных в этой таблице "
modx_ms2_orders
".
Но когда перехожу в заказы в админке, там не вижу моего поля.
Само поле создавал так через sql "
ALTER TABLE `modx_ms2_orders` ADD `regular_customer` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' ;
"
Viktor
30 декабря 2022, 08:39
modx.pro
176
0

Комментарии: 3

Артур Шевченко
30 декабря 2022, 12:14
0
А почему нельзя просто проверять есть ли у этого пользователя 5 или более заказов и делать, то что нужно?
    Viktor
    30 декабря 2022, 12:49
    0
    Потому что задача стоит такая, чтобы если больше 5тя сделанных заказов, то должна галочка стоят в каждом заказе от этого пользователя. Нет какого-то функционала если больше 5ти заказов, это галочка чисто для менеджеров будет
    Viktor
    30 декабря 2022, 13:16
    0
    Решил с помощью данной статьи. modx.pro/solutions/22595

    Теперь плагин такой.

    <?php
    switch($modx->event->name){
        case 'OnMODXInit':
        $map = array(
                'msOrder' => array(
                    'fields' => array(
                        'regular_customer' => 0
                    ),
                    'fieldMeta' => array(
                        'regular_customer' => array(
                        'dbtype' => 'tinyint',
                        'precision' => 1,
                        'attributes' => 'unsigned',
                        'phptype' => 'boolean',
                        'null' => false,
                        'default' => 0,
                        ),
                    ),
                ),
            );
            foreach ($map as $class => $data) {
                $modx->loadClass($class);
    
                foreach ($data as $tmp => $fields) {
                    if ($tmp == 'fields') {
                        foreach ($fields as $field => $value) {
                            foreach (array('fields', 'fieldMeta', 'indexes') as $key) {
                                if (isset($data[$key][$field])) {
                                    $modx->map[$class][$key][$field] = $data[$key][$field];
                                }
                            }
                        }
                    } elseif ($tmp == 'composites' || $tmp == 'aggregates') {
                        foreach ($fields as $alias => $relation) {
                            if (!isset($modx->map[$class][$tmp][$alias])) {
                                $modx->map[$class][$tmp][$alias] = $relation;
                            }
                        }
                    }
                }
            }
            break;
        
        case 'msOnManagerCustomCssJs':
            if ($page != 'orders') return;
            $modx->controller->addHtml("
                <script>
                    Ext.ComponentMgr.onAvailable('minishop2-window-order-update', function(){
                        let orderTab = this.fields.items[0].items;
                        let obj = {
                            layout: 'column',
                            defaults: {
                                msgTarget: 'under',
                                border: false
                            },
                            anchor: '100%',
                            items: [
                                { 
                                    columnWidth: 1,
                                    layout: 'form',
                                    items:[
                                        {
                                            title: 'Регулярный пользователь',
                                            xtype: 'xcheckbox',
                                            id: 'minishop2-regular-customer',
                                            labelAlign: 'top',
                                            name: 'regular_customer',
                                            fieldLabel: 'Регулярный пользователь',                                        
                                            autoHeight: true,
                                            inputValue: 1,
                                            border: false,
                                            anchor: '100%',
                                            value: this.record.regular_customer
                                        }
                                    ]
                                }
                            ]
                        }
                        orderTab.push(obj);
                    });                
                </script>");
        break;
    }
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3