Нужна помощь по 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? Чекбокс появляется при клике по таблице, когда его надо переключить, и после опять пропадает. Причем появляется тоже кривовато (не полностью перекрывает таблицу) Прошу помощи!

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

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

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

Большое спасибо! Пока отлично двигаюсь сам, думаю скоро возникнет вопрос о том как по кнопочке вызвать поп_ап, ну и собственно как сверстать его с помощью 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); Вот оно "вообще не проблема" :) Не хочется создавать новую тему, теперь встал вопрос как решить вот такую задачу: Добавляем новый ресурс, и в этот момент надо решить, отправить Анонсы для подписавшихся пользователей или нет. Что почитать\куда копать на эту тему? Спасибо.

Смотрите в сторону плагинов.