[Ext JS] Разработка компонента: Выгрузка XLS файла

Есть свой компонент, там есть список заказов и сейчас задача сделать выгрузку XLS файла для отдельного заказа. То есть в списке заказов кликаем на ссылку и выгружается файл с информацией только об этом заказе.

Код ссылки:
{
                        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 без создания и передачи данных в процессор?
Владимир
09 октября 2018, 16:55
modx.pro
989
0

Комментарии: 3

Евгений Webinmd
09 октября 2018, 23:15
0
Только если научите extjs создавать xls файлы
    Sergey Leleko
    10 октября 2018, 08:52
    0
    Вам как вариант надо будет phpExcel библиотеку использовать для генерации файла
      Владимир
      11 октября 2018, 23:08
      1
      +2
      Привожу код, как это можно реализовать через процессор возможно кому-то пригодится

      Код кнопки/ссылки:
      {
                              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';
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        3