Редактир-я в modExt:как получить данные др таблиц?

Есть таблица А, таблица Б в компоненте.
Одно из полей таблицы Б компонента содержит id документа modResource. В getlist.class.php (компонент не на гитхабе, modExtra для наглядности) таблицы А я джоиню таблицу Б, в которой собственно id документа и джоиню modResource в prepareQueryBeforeCount, а в гирде вывожу pagetitle в одной из колонок и вместо Б.id, который собственно хранится в А,- Б.name и все хорошо.
Но в функции update в row лежат только данные строки таблицы, которую мы редактируем (т.е. А), данных, полученных в getlist.class.php там нету. Но мне нужно
1) как-то вывесить в окне редактирования pagetitle документа, указанного в строке, указанной в Б (с помощью {xtype:'displayfield'… или {html: '...)
2) скормить комбобоксу id modResource из той строки Б, Б.id который лежит в А сейчас, чтобы он мог предложить из Б строки, которые содержат такой же modResource.id

В принципе я разведал, что нужные мне данные лежат в this.store.getAt(rowIndex).data.resource_id, где rowIndex — индекс редактируемой строки. И весь вопрос сейчас как получить его в функции getMenu, примерно тоже, что в listeners: { rowDblClick: function(grid, rowIndex, e)… означает rowIndex

Ну и еще вопрос: можно ли как-то отсортировавть документе в гирде по-умолчанию?
Если в процессоре поменять public $defaultSortField = 'id'; public $defaultSortDirection = 'DESC';, то в ext.js не работает sortable: true
Антон Соловьёв
15 июля 2014, 08:19
modx.pro
1 116
0

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

Алексей Ерохин
15 июля 2014, 15:05
+1
1) Обычно есть еще процессор get.class.php, который берет запись из базы по ключу и заполняет поля в окне редактирования. В нем Вы также можете переопределить нужные функции для джоина таблицы.

2) Вы можете сделать свой виджет селекта с получением данных ajax-ом, запрос отправлять либо на специально созданный процессор, либо на getlist.class.php, который настроен на обработку входящих параметров.

3) Про сортировку: github.com/bezumkin/modExtra/blob/master/assets/components/modextra/js/mgr/widgets/items.grid.js
В baseParams Вы можете указать какую сортировку использовать (например, отправить sort: 'id', sortdir:'ASC'. Вам нужно будет также получить эти параметры в getlist.class.php с помощью $this->getProperty('sort') (вроде бы так, не помню точно)
    Антон Соловьёв
    15 июля 2014, 15:36
    0
    Спасибо тебе, мудрый человек. Начал делать снизу вверх:
    Т.к. при сортировке в post уходят sort и dir, а не sortdir и почему-то с датами (в столбце for) данный метод не проходит, отлавливаю так в getlist.class.php так:
    if($this->getProperty('sort') !== 'from')
                $c->sortby($this->getProperty('sort'),$this->getProperty('dir'));
      Антон Соловьёв
      15 июля 2014, 15:54
      0
      1) Обычно есть еще процессор get.class.php, который берет запись из базы по ключу и заполняет поля в окне редактирования. В нем Вы также можете переопределить нужные функции для джоина таблицы.
      Но ведь в modObjectGetProcessor, который наследует процессор в get.class.php, нет метода prepareQueryBeforeCount(xPDOQuery $c), так что же мне переопределять? Как поджоинить данные?
        Василий Наумкин
        15 июля 2014, 19:58
        0
        Там есть другие методы, например cleanup готовит вывод массива.

        Джойнить в get ничего не нужно, ибо всегда выбирается только один ресурс.
          Антон Соловьёв
          16 июля 2014, 14:34
          0
          Спасибо, переопределил, все ок.
          Единственно, насколько принято писать так
          ,baseParams: { action: 'mgr/expert/getlist', resource_id:config.record.object.resource_id }
          Может лучше выше где-нибудь this.resource_id = config.record.object.resource_id, и уже
          ,baseParams: { action: 'mgr/expert/getlist', resource_id:this.resource_id }
          ?
            Василий Наумкин
            16 июля 2014, 15:13
            0
            Мне больше нравится передавать через config, но это уж сам выбирай, как удобнее.
      wld
      wld
      15 июля 2014, 20:47
      0
      Но в функции update в row лежат только данные строки таблицы, которую мы редактируем (т.е. А), данных, полученных в getlist.class.php там нету.
      А что указано в fields?
        Антон Соловьёв
        16 июля 2014, 14:36
        0
        Да данные из А, + немного связанных данных из Б + pagetitle документа, с id == Б.resource_id
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8