[Ext JS] Разработка компонента: Выгрузка XLS файла
Есть свой компонент, там есть список заказов и сейчас задача сделать выгрузку XLS файла для отдельного заказа. То есть в списке заказов кликаем на ссылку и выгружается файл с информацией только об этом заказе.
Код ссылки:
Код обработчика:
В обработчике я могу получить все необходимые данные для выгрузки. Поэтому вопрос, можно выгрузить XLS файл силами extjs без создания и передачи данных в процессор?
Код ссылки:
{
xtype: 'label',
html: '<button onclick="orders.utils.renderXLS();" class="icon icon-xls" title="' + _('orders_item_button_excel_title') + '"></button>',
}
Код обработчика:
orders.utils.renderXLS = function() {
var orderID = Ext.getCmp('id');
console.log(orderID.getValue());
};
В обработчике я могу получить все необходимые данные для выгрузки. Поэтому вопрос, можно выгрузить XLS файл силами extjs без создания и передачи данных в процессор?
Комментарии: 3
Только если научите extjs создавать xls файлы
Вам как вариант надо будет phpExcel библиотеку использовать для генерации файла
Привожу код, как это можно реализовать через процессор возможно кому-то пригодится
Код кнопки/ссылки:
Код обработчика(здесь важно чтобы в поля id был установлен параметр id):
Код процессора:
Код кнопки/ссылки:
{
xtype: 'button',
scope: this,
enableToggle: true,
iconCls : 'icon icon-xls',
handler: orders.utils.renderXLS,
}
Код обработчика(здесь важно чтобы в поля id был установлен параметр id):
orders.utils.renderXLS = function() {
var orderID = Ext.getCmp('id');
var _params = {
action: 'mgr/item/xls',
orderID: orderID.getValue(),
HTTP_MODAUTH: MODx.siteId
};
link = orders.config.connector_url + '?' + Ext.urlEncode(_params);
var win = window.open(link, '_blank');
win.focus();
};
Код процессора:
<?php
class ordersItemXlsGetListProcessor extends modObjectGetListProcessor
{
public $objectType = 'ordersItem';
public $classKey = 'ordersItem';
public $defaultSortField = 'id';
public $defaultSortDirection = 'ASC';
public $languageTopics = ['orders:default'];
public function prepareQueryBeforeCount(xPDOQuery $c) {
$c->select($this->modx->getSelectColumns($this->classKey, $this->classKey));
$orderID = $this->getProperty('orderID');
if($orderID){
$c->where([
'id' => $orderID,
]);
}
return $c;
}
public function process() {
$beforeQuery = $this->beforeQuery();
if ($beforeQuery !== true) {
return $this->failure($beforeQuery);
}
$data = $this->getData();
$this->createExcel($data);
return '';
}
public function createExcel(array $data) {
foreach ($data['results'] as $object) {
if ($this->checkListPermission && $object instanceof modAccessibleObject && !$object->checkPolicy('list')) {
continue;
}
$orderArr = $this->prepareRow($object);
break;
}
//код формирования Excel файла
return '';
}
}
return 'ordersItemXlsGetListProcessor';
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.