на страничке по 2 поля. (имя, email)
Мне надо сейвить эти данные в админку с возможностью выгрузки в виде json или xml
Как лучше подойти к этому?
Мне предложили создавать ресурсы, но мне кажется это избыточным
Какие можете предложить варианты, плагины?
Через formIt пиши в админку, там есть хук который сохраняет данные, выгрузка по дефолту есть в csv
используете в Formit'e FormItSaveForm а выгрузку делаете плагином из базы
Создаем каталог assets/components/sendexExport В нем assets/components/sendexExport/action.php <?php require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/config.core.php'; require_once MODX_CORE_PATH . 'config/' . MODX_CONFIG_KEY . '.inc.php'; require_once MODX_CONNECTORS_PATH . 'index.php'; $corePath = $modx->getOption('sendex_core_path', null, $modx->getOption('core_path') . 'components/sendex/'); require_once $corePath . 'model/sendex/sendex.class.php'; $modx->sendex = new Sendex($modx); $list = $modx->getIterator('sxSubscriber'); $out = [ 'success'=>true, 'url'=>'/assets/components/sendexExport/export.csv?'.time(), ]; $fp = fopen('export.csv', 'w'); foreach ($list as $item){ fputcsv($fp, ['id'=>$item->id,'email'=>$item->email]); } fclose($fp); echo json_encode($out,256); В нем assets/components/sendexExport/js/sendexExport.js if(typeof(Sendex.page.Home ) != "undefined"){ Ext.ComponentMgr.onAvailable("sendex-grid-newsletter-subscribers", function (e) { var newWindow = Ext.getCmp("sendex-grid-newsletter-subscribers"); newWindow.exportForm = function () { MODx.msg.confirm({ title: ('Подтвердите экспорт'), text: ('Экспортировать email адреса?'), url: '/assets/components/sendexExport/action.php', listeners: { 'success': { fn: function (data) { var newlink = document.createElement('a'); newlink.setAttribute('target', '_blank'); newlink.setAttribute('download', 'data.csv'); newlink.setAttribute('href',data.url); newlink.click() }, scope: this }, 'error': { fn: function (data) { MODx.msg.status({ title: _('error'), message: 'Произошла ошибка!' }); }, scope: this } } }); return true; }; newWindow.tbar = [{ xtype: 'sendex-combo-user' , name: 'user_id' , hiddenName: 'user_id' , width: 200 , listeners: { select: {fn: this.addSubscriber, scope: this} } }, { xtype: 'button', text: ('<i class="icon-arrow-circle-down icon"></i> Экспорт'), id: 'modx-exportForm', cls: 'x-btn-restore-all', listeners: { 'click': {fn: this.exportForm, scope: this} } }, '->', { xtype: 'sendex-combo-group' , name: 'group_id' , hiddenName: 'group_id' , width: 200 , listeners: { select: {fn: this.addSubscribers, scope: this} } }] }); } Создаем плагин sendexExport на событие OnManagerPageInit <?php $file = MODX_ASSETS_URL.'components/sendexExport/js/sendexExport.js'; $modx->regClientStartupScript($file); в хуках указываем 'hooks' => 'spam,email,FormItSaveForm,SendexSubscribe',
спасибо, я так и сделал)
Обсуждают сегодня