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