Добавить combobox в форму редактирования пользователя в админке

С добавлением поля практически справился. Создал плагин на события OnUserFormPrerender и OnUserFormSave с кодом:
<?php
switch($modx->event->name) {
	case 'OnUserFormPrerender':
		$modx->regClientStartupScript('/assets/components/orders/js/mgr/user_form/combo.js');
		$modx->regClientStartupScript('/assets/components/orders/js/mgr/user_form/tab.js');
	break;
	case 'OnUserFormSave':
		$profile = $user->getOne('Profile');
        $fields = $profile->get('extended');
        $fields['manager'] = $_POST['manager'];
        $profile->set('extended', $fields);
        $profile->save();
	break;
}

Два JS файла:
1. Для вывода новой вкладки
Ext.onReady(function() {
    var usertabs = Ext.getCmp('modx-user-tabs');
    usertabs.add({
        title: 'Модуль Заказы',
        layout: 'form',
        autoScroll: true,
        autoHeight: true,
        labelAlign: 'top',
        cls: 'main-wrapper',
        items: [
            {
                xtype: 'modx-orders-manager',
                name: 'manager',
                fieldLabel: 'Менеджер',
                width: 176,
            }
        ]
    });
});

2. Для combobox
MODx.combo.Manager = function (config) {
    config = config || {};
    Ext.applyIf(config, {
        name: 'manager',
        hiddenName: config.name || 'manager',
        displayField: 'name',
        valueField: 'id',
        fields: ['id', 'name'],
        pageSize: 9999,
        hideMode: 'offsets',
        emptyText: ' - ',
        url: MODx.config.assets_url+'components/orders/connector.php',
        baseParams: {
            action: 'mgr/manager/getlist',
            sort: 'name',
            dir: 'asc',
            combo: true,
            limit: 9999,
        }
    });
    MODx.combo.Manager.superclass.constructor.call(this, config);
};
Ext.extend(MODx.combo.Manager, MODx.combo.ComboBox);
Ext.reg('modx-orders-manager', MODx.combo.Manager);

В результате получилось вот так


Combobox выводится и данные сохраняются, но сделать чтобы после повторного открытия формы в combobox подставлялось уже сохраненное значение не получается.

И еще один вопрос, где подключить лексокон чтобы можно было вывести тексты из кода JS?
Владимир
25 сентября 2018, 00:38
modx.pro
2
1 216
+1

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

SEQUEL.ONE
25 сентября 2018, 21:48
0
hiddenName: 'name',
вообщем укажи поле из таблицы своей только, тогда должно показываться выбранное значение
    SEQUEL.ONE
    25 сентября 2018, 22:35
    0
    Редактирование отключили, не могу изменить. Там по идее вставить нужно то, что в секции name

    hiddenName: 'manager',
      Владимир
      26 сентября 2018, 14:25
      0
      спасибо )

      Проблему решил следующим образом

      1. Добавил событие OnUserFormRender и код в плагин

      case 'OnUserFormRender':
              if($mode != 'new'){
                  $fieldExt = $user->getOne('Profile')->get('extended');
                  $modx->regClientStartupHTMLBlock('
      				<script type="text/javascript">
          				Ext.onReady(function() {
              				Ext.getCmp(\'modx-user-manager\').setValue(' . $fieldExt['manager'] . ');
      					})	
      				</script>
      			');
              }
              break;
      2. Добавил параметр ID , в результате получилось
      items: [{
                  id: 'modx-user-manager',
                  xtype: 'modx-orders-manager',
                  name: 'modx-user-manager',
                  fieldLabel: 'Менеджер',
                  width: 176,
              }
              ]
    Владимир
    26 сентября 2018, 14:29
    0
    Осталась только проблема с лексиконом. Никак не получается его подключить в файл JS. Как я понимаю это нужно делать в плагине, но подключение $modx->lexicon->load('orders:default'); ничего не дает
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4