Как вывести в модальном окне таблицу с зависимыми данными extjs
Всем привет. Пытаюсь вывести в своём компоненте в модальном окне таблицу с релизами, кликнув по кнопке из actions на предмете из другой таблицы:
Нашёл вот это решение, но не получается отфильтровать результат в таблице в модальном окне.
bezumkin.ru/training/course1/2202/
// 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);
Каким образом ещё можно снизу в модальном окне убрать кнопку Сохранить? Комментарии: 4
Надо ещё и в процессоре добавлять выборку по id. Вот тут почитай, думаю, будет ясно:
ilyaut.ru/reposts/object-relations-in-customextra/
ilyaut.ru/reposts/object-relations-in-customextra/
Спасибо. Но у меня не вышло. После того как добавляю в процессор:
$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
));
}
Таблица перестаёт отображаться вообще.
А всё. Разобрался. Надо было так писать:
$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
));
}
Кнопками управлять так.
При объявлении окна, внутри
При объявлении окна, внутри
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);
}
}
]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.