extJS. Свой select с данными из базы

Собственно, как создать свой combobox на extJS при этом дёргая в него данные из базы?

Вот код, который я накодил и зашёл в тупик:
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';
Павел Гвоздь
05 ноября 2015, 15:40
modx.pro
4
2 058
0
Поблагодарить автора Отправить деньги

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

Павел Гвоздь
05 ноября 2015, 19:50
0
Может быть так будет заметнее? Прошу помощи, друзья.
    Сергей Шлоков
    05 ноября 2015, 21:18
    +1
    И то, и другое содержат ошибки. Данные в комбобокс нужно зачитывать gitlist процессором.
      Сергей Шлоков
      06 ноября 2015, 09:16
      +1
      В смысле getlist процессором, который выглядит так
      <?php
      class hostPanelSettingsGetListProcessor extends modObjectGetListProcessor {
      	public $objectType = 'hostPanelSettings';
      	public $classKey = 'hostPanelSettings';
      
      return 'hostPanelSettingsGetListProcessor';
    ArtSur
    07 декабря 2015, 14:05
    0
    Столкнулся с такой же необходимостью, однако из приведенного примера ничего непонятно.
    Не могли бы вы для примера опубликовать рабочий вариант без ошибок. И еще вопрос, файл процессора, насколько я понимаю должен лежать в дирректории /core/components/имя_компонента/processors/mgr/в_моем_случае_item_вместо_settings?
      ArtSur
      07 декабря 2015, 14:16
      0
      В процессоре кроме этого (конечно же с другими именами):
      <?php
      class hostPanelSettingsGetListProcessor extends modObjectGetListProcessor {
      	public $objectType = 'hostPanelSettings';
      	public $classKey = 'hostPanelSettings';
      
      return 'hostPanelSettingsGetListProcessor';
      Чтото еще должно быть?
        ArtSur
        07 декабря 2015, 15:30
        0
        Вообщем как обычно, не дождавшись ответа, нашел решение сам. Попробую описать подробно. Думаю пригодится еще не раз.

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