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'            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.