Как вывести в модальном окне таблицу с зависимыми данными extjs

Всем привет. Пытаюсь вывести в своём компоненте в модальном окне таблицу с релизами, кликнув по кнопке из actions на предмете из другой таблицы:

// Releases
        $array['actions'][] = [
            'cls' => '',
            'icon' => 'icon icon-archive',
            'title' => $this->modx->lexicon('extras_package_releases'),
            //'multiple' => $this->modx->lexicon('extras_packages_update'),
            'action' => 'releasesPackage',
            'button' => true,
            'menu' => true,
        ];

Нашёл вот это решение, но не получается отфильтровать результат в таблице в модальном окне.

bezumkin.ru/training/course1/2202/
,baseParams: {
	action: 'mgr/newsletter/subscriber/getlist'
	,newsletter_id: config.record.id
}
Выводится вся таблица, а нужно только чтобы выводило релизы по ключу package_id. Делаю следующим образом:

releasesPackage: function(grid, e, row) {
        if (typeof(row) != 'undefined') {this.menu.record = row.data;}
        var id = this.menu.record.id;

        MODx.Ajax.request({
            url: Extras.config.connector_url,
            params: {
                action: 'mgr/package/get',
                id: id
            },
            listeners: {
                success: {fn:function® {
                        if (this.windows.releasesPackage) {
                            this.windows.releasesPackage.close();
                            this.windows.releasesPackage.destroy();
                        }
                        this.windows.releasesPackage = MODx.load({
                            xtype: 'extras-package-window-releases',
                            record: r,
                            listeners: {
                                success: {fn:function() { this.refresh(); },scope:this}
                            }
                        });
                        this.windows.releasesPackage.fp.getForm().reset();
                        this.windows.releasesPackage.fp.getForm().setValues(r.object);
                        this.windows.releasesPackage.show(e.target);
                    },scope:this}
            }
        });
    },
А вот так выглядит вывод окна:

Extras.window.ReleasesPackage = function (config) {
    config = config || {};
    if (!config.id) {
        config.id = 'extras-package-window-releases';
    }
    Ext.applyIf(config, {
        title: _('extras_package_releases'),
        width: 677,
        autoHeight: true,
        url: Extras.config.connector_url,
        baseParams: {
            action: 'mgr/release/getlist'
        },
        fields: this.getFields(config)
    });
    Extras.window.ReleasesPackage.superclass.constructor.call(this, config);
};
Ext.extend(Extras.window.ReleasesPackage, MODx.Window, {

    getFields: function () {
        return [{
            title: _('extras_package_releases'),
            xtype: 'extras-grid-releases',
            layout: 'anchor',
            cls: MODx.modx23 ? '' : 'main-wrapper',
            pageSize: 5
        }];
    },

    loadDropZones: function () {
    }

});
Ext.reg('extras-package-window-releases', Extras.window.ReleasesPackage);
Каким образом ещё можно снизу в модальном окне убрать кнопку Сохранить?
SEQUEL.ONE
10 марта 2019, 20:33
modx.pro
1
993
0

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

Илья Уткин
11 марта 2019, 07:35
+1
Надо ещё и в процессоре добавлять выборку по id. Вот тут почитай, думаю, будет ясно:
ilyaut.ru/reposts/object-relations-in-customextra/
    SEQUEL.ONE
    11 марта 2019, 18:23
    0
    Спасибо. Но у меня не вышло. После того как добавляю в процессор:

    $c->leftJoin('ExtrasPackages', 'ExtrasPackages', '`ExtrasPackages`.`id` = `'.$this->classKey.'`.`package_id`');
            $c->select($this->modx->getSelectColumns($this->classKey, $this->classKey));
            $c->select('`ExtrasPackages`.`id` as `package_id`');
            $c->groupby($this->classKey . '.package_id');
    
            $package_id = trim($this->getProperty('id'));
            if ($package_id) {
                $c->where(array(
                    'package_id' => $package_id
                ));
            }
    Таблица перестаёт отображаться вообще.
      SEQUEL.ONE
      11 марта 2019, 18:37
      0
      А всё. Разобрался. Надо было так писать:

      $c->leftJoin('ExtrasPackages', 'ExtrasPackages', 'ExtrasPackages.id = ExtrasReleases.package_id');
              $c->select(array($this->modx->getSelectColumns('ExtrasReleases', 'ExtrasReleases')));
              $c->select(array('ExtrasPackages.id as package_id', 'ExtrasPackages.name as package_name'));
              $c->groupby($this->classKey . '.id');
      
              $package_id = trim($this->getProperty('package_id'));
              if ($package_id) {
                  $c->where(array(
                      'package_id' => $package_id
                  ));
              }
    Наумов Алексей
    11 марта 2019, 09:05
    1
    +1
    Кнопками управлять так.
    При объявлении окна, внутри
    Ext.applyIf(config, {
    после
    fields: this.getFields(config)
    добавляем еще кнопки (по умолчанию их 2 штуки, а вот вам пример на 4 штуки)
    buttons: [
                {
                    text: 'Моя кнопка',
                    scope: this,
                    handler: function () {
                        alert("Работает");
                    }
                },
                {
                    text: config.cancelBtnText || _('cancel'),
                    scope: this,
                    handler: function () {
                        config.closeAction !== 'close' ? this.hide() : this.close();
                    }
                },
                {
                    text: config.saveBtnText || _('save'),
                    scope: this,
                    handler: function () {
                        this.submit(false);
                    }
                },
                {
                    text: config.saveBtnText || _('save_and_close'),
                    cls: 'primary-button',
                    scope: this,
                    handler: function () {
                        this.submit(true);
                    }
                }
            ]
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4