extJS. Свой select с данными из базы
Собственно, как создать свой combobox на extJS при этом дёргая в него данные из базы?
Вот код, который я накодил и зашёл в тупик:
В процессоре /mgr/settings/get.class.php вот такой код:
Вот код, который я накодил и зашёл в тупик:
hostPanel.combo.version = function(config) {
config = config || {};
Ext.applyIf(config, {
store: new Ext.data.JsonStore({
id: 0,
autoLoad: true,
fields: ['value'],
url: hostPanel.config.connector_url,
baseParams: {
action: 'mgr/settings/get',
name: 'version',
},
}),
mode: 'remote',
displayField: 'value',
valueField: 'value',
triggerAction: 'all',
listeners: {
success: {
fn: function () {
console.log('success')
}, scope: this
},
error: {
fn: function () {
console.log('error')
}, scope: this
},
},
});
hostPanel.combo.version.superclass.constructor.call(this,config);
};
Ext.extend(hostPanel.combo.version, MODx.combo.ComboBox);
Ext.reg('hostpanel-combo-version', hostPanel.combo.version);
В процессоре /mgr/settings/get.class.php вот такой код:
<?php
class hostPanelSettingsGetProcessor extends modObjectGetProcessor {
public $objectType = 'hostPanelSettings';
public $classKey = 'hostPanelSettings';
public function process()
{
$limit = trim($this->getProperty('limit', 10));
$name = $this->getProperty('name');
$c = $this->modx->newQuery($this->classKey);
$c->select('value');
$c->where(array('name' => $name));
$c->limit($limit);
if( $c->prepare() && $c->stmt->execute() ) {
$res = $c->stmt->fetchAll(PDO::FETCH_ASSOC);
}
else { $res = array(); }
return $this->outputArray($res);
}
}
return 'hostPanelSettingsGetProcessor';
Поблагодарить автора
Отправить деньги
Комментарии: 8
Может быть так будет заметнее? Прошу помощи, друзья.
И то, и другое содержат ошибки. Данные в комбобокс нужно зачитывать gitlist процессором.
В смысле getlist процессором, который выглядит так
<?php
class hostPanelSettingsGetListProcessor extends modObjectGetListProcessor {
public $objectType = 'hostPanelSettings';
public $classKey = 'hostPanelSettings';
return 'hostPanelSettingsGetListProcessor';
Спасибо, Сергей. Очень помог! Может быть в этом вопросе тоже будет возможность помочь? — modx.pro/help/6953/
Пожалуйста!
Столкнулся с такой же необходимостью, однако из приведенного примера ничего непонятно.
Не могли бы вы для примера опубликовать рабочий вариант без ошибок. И еще вопрос, файл процессора, насколько я понимаю должен лежать в дирректории /core/components/имя_компонента/processors/mgr/в_моем_случае_item_вместо_settings?
Не могли бы вы для примера опубликовать рабочий вариант без ошибок. И еще вопрос, файл процессора, насколько я понимаю должен лежать в дирректории /core/components/имя_компонента/processors/mgr/в_моем_случае_item_вместо_settings?
В процессоре кроме этого (конечно же с другими именами):
<?php
class hostPanelSettingsGetListProcessor extends modObjectGetListProcessor {
public $objectType = 'hostPanelSettings';
public $classKey = 'hostPanelSettings';
return 'hostPanelSettingsGetListProcessor';
Чтото еще должно быть?
Вообщем как обычно, не дождавшись ответа, нашел решение сам. Попробую описать подробно. Думаю пригодится еще не раз.
Есть таблица городов: code, name, вкоторой code — что то типа spb, msk, ykb и т.д. name — имена.
Из этой таблички надо взять данные для подстановки code в другую таблицу избранных адресов.
Для таблицы городов создан компонент на основе modExtra (соответственно и процессор GetList для него уже есть)
Для рендеринга нашего комбобокса пишем такой код:
а
Сам процессор чтения списка менять не пришлось.
Как выяснилось, ошибка у топик-стартера была в том, что вот эту часть кода
Есть таблица городов: code, name, вкоторой code — что то типа spb, msk, ykb и т.д. name — имена.
Из этой таблички надо взять данные для подстановки code в другую таблицу избранных адресов.
Для таблицы городов создан компонент на основе modExtra (соответственно и процессор GetList для него уже есть)
Для рендеринга нашего комбобокса пишем такой код:
FAddr.utils.Cities = function(config) {
config = config || {};
Ext.applyIf(config,{
fields: ['code','name']
,autoLoad: true
,url: '/assets/components/city/connector.php'
,baseParams:{
action: 'mgr/item/getlist',
}
,mode: 'remote'
,displayField: 'name'
,valueField: 'code'
,triggerAction: 'all'
});
FAddr.utils.Cities.superclass.constructor.call(this,config);
};
Ext.extend(FAddr.utils.Cities,MODx.combo.ComboBox);
Ext.reg('faddr-combo-cities',FAddr.utils.Cities);
Где url: '/assets/components/city/connector.php'
— путь к коннектору другого компонента (города)а
action: 'mgr/item/getlist'
— указание процессора getlistСам процессор чтения списка менять не пришлось.
Как выяснилось, ошибка у топик-стартера была в том, что вот эту часть кода
store: new Ext.data.JsonStore({
id: 0,
autoLoad: true,
fields: ['value'],
url: hostPanel.config.connector_url,
baseParams: {
action: 'mgr/settings/get',
name: 'version',
},
}),
mode: 'remote',
displayField: 'value',
valueField: 'value',
triggerAction: 'all'
нужно было заменить наautoLoad: true,
fields: ['value'],
url: hostPanel.config.connector_url,
baseParams: {
action: 'mgr/settings/get',
name: 'version',
},
mode: 'remote',
displayField: 'value',
valueField: 'value',
triggerAction: 'all'
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.