Нужна помощь по modx extjs

3 день пишу модуль для админки по уроку с хабра. Пришлось её всю перелопатить т.к на 2.3.1 сразу не взлетело. Еще и с Extjs знаком практически никак. В общем есть код:

/* home.js */ 
brual.page.Home = function(config) {
    config = config || {};
    Ext.applyIf(config,{
        components: [{
            xtype: 'brual-panel-home',
			renderTo: 'brual-main-div',
			frame: true
        }]
    }); 
    brual.page.Home.superclass.constructor.call(this,config);
};
Ext.extend(brual.page.Home, MODx.Component);
Ext.reg('brual-page-home', brual.page.Home);
Ext.onReady(function() {
    MODx.load({ xtype: 'brual-page-home'});
}); 
/* panel.js */ 
brual.panel.Home = function(config) {
    config = config || {};
    Ext.apply(config,{
        border: false,
		baseCls: 'modx-formpanel',
		frame    : true,
		items: [{
				html: '',
				border: false,
				cls: 'modx-page-header'
			},{
				xtype: 'modx-tabs',
				bodyStyle: 'padding: 10px',
				defaults: { border: false, autoHeight: true },
				border: true,
				stateful: true,
				stateId: 'brual-tabpanel',
				stateEvents: ['tabchange'],
				getState:function() {
					return { activeTab:this.items.indexOf(this.getActiveTab()) };
				},
				items: [
					{
						title: 'Титл',
						defaults: { autoHeight: true },
						items: [
							{
								html: '',
								border: false
							},
							{
								xtype: 'brual-grid-users',
								preventRender: true
							}
						]
					}
				]
			}
		]
    });
    brual.panel.Home.superclass.constructor.call(this,config);
};

 /* Регистрируем панель, чтобы ее мог потом вызвать предыдущий скрипт */
Ext.extend(brual.panel.Home, MODx.Panel);
Ext.reg('brual-panel-home', brual.panel.Home); 
/* users.grid.js */ 
brual.grid.users = function(config) {
    config = config || {};
	
	Ext.applyIf(config, {
		id: 'brual-grid-users',
		url: brual.config.connector_url,
		baseParams: { action: 'mgr/users.grid' },
		fields: [
			{ name: 'daily', type: 'bool' },
			{ name: 'specialreview', type: 'bool' },
			{ name: 'tradingideas', type: 'bool' },
			{ name: 'active', type: 'bool',}
		],
        columns: [
			{
				header: "Daily",
				dataIndex: 'daily',
				width: 'auto',
				sortable: true,
				editor: {
					xtype: 'xcheckbox',
				}
			},
			{
				header: "Special Review",
				dataIndex: 'specialreview',
				width: 'auto',
				sortable: true,
				editor: {
					xtype: 'checkbox',
				}
			},
			{
				header: "Trading Ideas",
				dataIndex: 'tradingideas',
				width: 'auto',
				sortable: true,
				editor: {
					xtype: 'checkbox',
				}
			},
			{
				header: "Активен",
				dataIndex: 'active',
				editor: {
					xtype: 'checkbox',
				}
			},
        ],
        autoHeight: true,
        loadMask: true,
		paging: true,
		autosave: false,
		remoteSort: true,
		anchor: '97%',
    });
	
    brual.grid.users.superclass.constructor.call(this, config);
};
Ext.extend(brual.grid.users, MODx.grid.Grid, {
});
Ext.reg('brual-grid-users', brual.grid.users); 

И всё то хорошо, данные из бд вывелись в таблицу. Но мне нужно сделать её редактируемой, и застрял я на том, что не могу сделать checkbox Он то тоже работает, но выглядит это примерно так: table\table\table false\true\false Как заставить его вывести сам чекбокс, а не true\false? Чекбокс появляется при клике по таблице, когда его надо переключить, и после опять пропадает. Причем появляется тоже кривовато (не полностью перекрывает таблицу) Прошу помощи!

Comments

так, с этим разобрался, теперь не понимаю как вызвать экшн при изменении чекбокса. (сейчас он выглядит как в админке параметры с "Да\Нет".

и с этим разобрался ))) я тут сам себе ответчик-советчик, класс

Ждем Сергея Прохорова, он должен помочь. Он как раз не так давно делал грид с чекбоксами. Я ему уже маякнул. Правда он сейчас на море серфит, но в течении дня должен появиться :)

Большое спасибо! Пока отлично двигаюсь сам, думаю скоро возникнет вопрос о том как по кнопочке вызвать поп_ап, ну и собственно как сверстать его с помощью extjs :) Т.к на данный момент вопросов по extjs нет, оффтоп: как то можно вывести анонсы из категорий, которые "protected" для не авторизованных ?

В Эксте попап вызвать вообще не проблема:

var w =  new Ext.Window({});

w.show();

Т.к на данный момент вопросов по extjs нет, оффтоп: как то можно вывести анонсы из категорий, которые "protected" для не авторизованных ?

Если вы попытаетесь получить список объектов документов, то недоступные для этого пользователя туда конечно же не попадут. Но это распространяется только на объекты, но не распространяется на SQL-запросы. То есть вы можете сделать простую выборку типа

$q = $modx->newQuery('modResource');

$q->select(array(

    "modResource.*",

));

$s = $q->prepare();

$s->execute();

$data = $s->fetchAll(PDO::FETCH_ASSOC);

foreach($data as $doc){

    print_r($doc);

    return;

}

Таким образом у вас будут данные нужных вам документов (условия запроса подставите сами, какие нужно). Так же можете делать выборку data-процессором site/web/resources, он так же не проверяет права, ибо получает данные, а не объекты.

В ExtJs выглядит всё достаточно просто, когда хочешь сделать админку как часть большого целого, то начинаешь падать всё глубже, при этом ударяясь о камни =) Столкнулся даже с тем, что не все примеры корректно работали (пользовался докой 3.4, вроде такой сейчас extjs в модх). В итоге пользовался примерами Василия Наумкина, у него кстати много полезных вещей, без которых я бы не сделал задуманное. В итоге получилось как то так:

brual.combo.Snippet = function(config) {

	config = config || {};

	Ext.applyIf(config,{

		name: 'snippet'

		,hiddenName: 'snippet'

		,displayField: 'name'

		,valueField: 'id'

		,fields: ['id','name']

		,pageSize: 10

		,hideMode: 'offsets'

		,url: MODx.config.connectors_url + 'element/snippet.php'

		,baseParams: {

			action: 'getlist'

		}

	});

	brual.combo.Snippet.superclass.constructor.call(this,config);

};

Ext.extend(brual.combo.Snippet,MODx.combo.ComboBox);

Ext.reg('brual-combo-snippet',brual.combo.Snippet);

brual.window.CreateNewUser = function(config) {

	config = config || {};

	this.ident = config.ident || 'mecnewsletter'+Ext.id();

	Ext.applyIf(config,{

		title: 'Добавить нового подписчика'

		,id: this.ident

		,url: brual.config.connector_url

		,action: 'mgr/users.create'

		,fields: [

			{xtype: 'textfield', fieldLabel: 'E-mail',name: 'login',anchor: '99%'},

			{xtype: 'checkbox', boxLabel: 'Доступ к разделу1', name: 'name1'},

			{xtype: 'checkbox', boxLabel: 'Доступ к разделу2', name: 'name2'},

			{xtype: 'checkbox', boxLabel: 'Доступ к разделу3', name: 'name3'},

		],

		items: [

            {

                html: 'Логин и пароль будут отправлены сразу после добавления нового пользователя.',

                border: false,

                cls: 'modx-page-header'

            }]

		,keys: [{key: Ext.EventObject.ENTER,shift: true,fn: function() {this.submit() },scope: this}]

	});

	brual.window.CreateNewUser.superclass.constructor.call(this,config);

};

Ext.extend(brual.window.CreateNewUser,MODx.Window);

Ext.reg('brual-window-newsletter-create',brual.window.CreateNewUser);

Вот оно "вообще не проблема" :) Не хочется создавать новую тему, теперь встал вопрос как решить вот такую задачу: Добавляем новый ресурс, и в этот момент надо решить, отправить Анонсы для подписавшихся пользователей или нет. Что почитать\куда копать на эту тему? Спасибо.