Контроллер resource/getlist
Добрый день, пишу тестовую CMP для modx. Нужно сделать combobox в который бы подгружался список ресурсов внутри определенного родителя.
Вопрос: как в ExtJS правильно пробросить parent в контроллер и возможно ли такое, или где найти контроллер resource/getlist что бы его изучить.
Вообще в тупике, зарылся, не знаю куда копать.
Код моего combobox:
Вопрос: как в ExtJS правильно пробросить parent в контроллер и возможно ли такое, или где найти контроллер resource/getlist что бы его изучить.
Вообще в тупике, зарылся, не знаю куда копать.
Код моего combobox:
//Custom ProjectResources combobox
Debureaucratization.utils.DbrProjectRes = function(config) {
config = config || {};
Ext.applyIf(config,{
name: 'project_id'
,hiddenName: 'project_id'
,displayField: 'pagetitle'
,valueField: 'id'
,fields: ['id','pagetitle']
,pageSize: 20
,url: MODx.config.connector_url
,baseParams: {
action: 'resource/getlist'
,parent: '21948'
}
,typeAhead: true
,editable: true
});
Debureaucratization.utils.DbrProjectRes.superclass.constructor.call(this,config);
};
Ext.extend(Debureaucratization.utils.DbrProjectRes,MODx.combo.ComboBox);
Ext.reg('dbr-project-combo',Debureaucratization.utils.DbrProjectRes);
Комментарии: 8
Ну вот у вас:
Я делал всегда свой процессор, не пользовал стандартный, например это будет core/components/МОЙКОМПОНЕНТ/processors/mgr/resource/getcategories.class.php
, тогда
,baseParams: {
action: 'resource/getlist'
,parent: '21948'
}
parent вы передали, он будет доступен в процессоре.Я делал всегда свой процессор, не пользовал стандартный, например это будет core/components/МОЙКОМПОНЕНТ/processors/mgr/resource/getcategories.class.php
, тогда
action: 'mgr/resource/getcategories'
а уже в этом процессоре возвращал что нужно
Спасибо большое, стало чуть понятнее.
Я на другой комментарий задал вопрос. А как правильнее с точки зрения modx наследоваться от
Я на другой комментарий задал вопрос. А как правильнее с точки зрения modx наследоваться от
modObjectGetListProcessorили
modResourceGetListProcessor
А процессор resource/getlist здесь github.com/modxcms/revolution/blob/2.x/core/model/modx/processors/resource/getlist.class.php
Понял, похоже стандартный процессор getlist не может выбрать по родителю.
А как будет правильно, наследовать новый процессор от
А как будет правильно, наследовать новый процессор от
class modResourceMyGetListProcessor extends modResourceGetListProcessor
или создать новый процессор что-то вроде:<?php
class DbrIdeatankReourceGetListProcessor extends modObjectGetListProcessor {
public $languageTopics = array('debureaucratization:dbrideatank');
public $classKey = 'ModReource';
public $defaultSortField = 'id';
public $defaultSortDirection = 'ASC';
public $checkListPermission = true;
public function prepareQueryBeforeCount(xPDOQuery $c) {
$parent = $this->getProperty('parent');
if (!empty($parent)) {
$c->where(array('parent:IS' => $parent));
}
return $c;
}
}
return 'DbrIdeatankResourceGetListProcessor';
Я от modObjectGetListProcessor наследую… но и объекты у меня чаще всего свои, не modResource
А когда объект свой, но в нем есть поле — линк по ID на объект modResource?
Как вы такую задачу решаете?
на текущем плейграунде не было никаких чужих компонентов с подобной связкой, что бы подсмотреть.
Как вы такую задачу решаете?
на текущем плейграунде не было никаких чужих компонентов с подобной связкой, что бы подсмотреть.
Не понял, что нужно получить?
Все тож самое… есть процессор «getList», в него передается некий критерий для ограничения выборки (parent), в методе prepareQueryBeforeCount задаем условия…
Все тож самое… есть процессор «getList», в него передается некий критерий для ограничения выборки (parent), в методе prepareQueryBeforeCount задаем условия…
напишу решение, вдруг кому будет полезно.
xtype для combobox (путь: assets/components/МОЙКОМПОНЕНТ/js/mgr/widgets/МОЙГРИД.grid.js)
xtype для combobox (путь: assets/components/МОЙКОМПОНЕНТ/js/mgr/widgets/МОЙГРИД.grid.js)
//Custom ProjectResources combobox
МОЕПРИЛОЖЕНИЕ.utils.DbrProjectRes = function(config) {
config = config || {};
Ext.applyIf(config,{
name: 'project_id'
,hiddenName: 'project_id'
,displayField: 'pagetitle'
,valueField: 'id'
,fields: ['id','pagetitle']
,pageSize: 20
,url: МОЕПРИЛОЖЕНИЕ.config.connectorUrl
,baseParams: {
action: 'mgr/МОЙКОМПОНЕНТ/getList'
,parent: '21948' //передаем parent id для выборки потомков по этому родителю
}
,typeAhead: true
,editable: true
});
МОЕПРИЛОЖЕНИЕ.utils.DbrProjectRes.superclass.constructor.call(this,config);
};
Ext.extend(МОЕПРИЛОЖЕНИЕ.utils.DbrProjectRes,MODx.combo.ComboBox);
Ext.reg('dbr-project-combo',МОЕПРИЛОЖЕНИЕ.utils.DbrProjectRes);
Код процессора (путь: core/components/МОЙКОМПОНЕНТ/processors/mgr/dbrresource/getlist.class.php):<?php
class DbrResourceCreateProcessor extends modObjectGetListProcessor {
public $classKey = 'modResource';
public $defaultSortField = 'id';
public $defaultSortDirection = 'ASC';
public $checkListPermission = true;
public function prepareQueryBeforeCount(xPDOQuery $c) {
$parent = $this->getProperty('parent');
if (!empty($parent)) {
$c->where(array('parent' => $parent));
}
return $c;
}
}
return 'DbrResourceCreateProcessor';
Спасибо Наумову Алексею за столь ценную подсказку!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.