Перемещение строк в Grid таблице ExtJs

Всем привет. Интересует такая штука как перемещение строк в Grid таблице modExtra и сохранение результата. В древе ресурсов такое есть, а что по поводу modExtra? Возможно ли такое организовать?
SEQUEL.ONE
20 июня 2020, 01:50
modx.pro
819
0

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

SEQUEL.ONE
20 июня 2020, 02:07
0
В MIGX такое реализовано в TV, но как я понимаю там он создаёт JSON.
    Алексей Ерохин
    20 июня 2020, 04:27
    +1
    github.com/modxcms/Collections/blob/master/assets/components/collections/js/mgr/widgets/category/collections.grid.resources.js
    В этом компоненте есть.
    Сам не реализовывал, надеюсь вы разберетесь :)
      Николай
      20 июня 2020, 10:11
      +1
      modExtra.grid.Items = function (config) {
          config = config || {};
      
          Ext.applyIf(config, {
              .....
              remoteSort: true,
              enableDragDrop: true,
              ddGroup: 'modextra-grid-dd',
              ddAction: 'mgr/item/sort',
              ....
          });
      
          modExtra.grid.Items.superclass.constructor.call(this, config);
          ......
          if (config.enableDragDrop && config.ddAction) {
              this.on('render', function(grid) {
                  grid._initDD(config);
              });
          }
      };
      Ext.extend(modExtra.grid.Items, MODx.grid.Grid, {
          .......
          _initDD: function (config) {
              var grid = this;
              var el = grid.getEl();
      
              new Ext.dd.DropTarget(el, {
                  ddGroup: grid.ddGroup,
                  notifyDrop: function (dd, e, data) {
                      var store = grid.getStore();
                      var target = store.getAt(dd.getDragData(e).rowIndex).id;
                      var sources = [];
                      if (data.selections.length < 1 || data.selections[0].id == target) {
                          return false;
                      }
                      for (var i in data.selections) {
                          if (!data.selections.hasOwnProperty(i)) {
                              continue;
                          }
                          var row = data.selections[i];
                          sources.push(row.id);
                      }
      
                      el.mask(_('loading'), 'x-mask-loading');
                      MODx.Ajax.request({
                          url: config.url,
                          params: {
                              action: config.ddAction,
                              sources: Ext.util.JSON.encode(sources),
                              target: target,
                          },
                          listeners: {
                              success: {
                                  fn: function () {
                                      el.unmask();
                                      grid.refresh();
                                      if (typeof(grid.reloadTree) == 'function') {
                                          sources.push(target);
                                          grid.reloadTree(sources);
                                      }
                                  }, scope: grid
                              },
                              failure: {
                                  fn: function () {
                                      el.unmask();
                                  }, scope: grid
                              },
                          }
                      });
                  },
              });
          }
      });
      
      Ext.reg('modextra-grid-items', modExtra.grid.Items);

      Оставил только то, что drag&drop касается. На месте точек другой код, не относящийся к сортировке. Собственно на процессор mgr/item/sort отправляются данные строк какие перемещаем. И в процессоре уже надо будет производить работу по сортировке. Тут уже много разных алгоритмов может быть.
        SEQUEL.ONE
        20 июня 2020, 15:00
        0
        А где бы сам процессор sort.class.php подсмотреть?)
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5