Редактир-я в 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
Одно из полей таблицы Б компонента содержит 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
Комментарии: 8
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') (вроде бы так, не помню точно)
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') (вроде бы так, не помню точно)
Спасибо тебе, мудрый человек. Начал делать снизу вверх:
Т.к. при сортировке в post уходят sort и dir, а не sortdir и почему-то с датами (в столбце for) данный метод не проходит, отлавливаю так в getlist.class.php так:
Т.к. при сортировке в post уходят sort и dir, а не sortdir и почему-то с датами (в столбце for) данный метод не проходит, отлавливаю так в getlist.class.php так:
if($this->getProperty('sort') !== 'from')
$c->sortby($this->getProperty('sort'),$this->getProperty('dir'));
1) Обычно есть еще процессор get.class.php, который берет запись из базы по ключу и заполняет поля в окне редактирования. В нем Вы также можете переопределить нужные функции для джоина таблицы.Но ведь в modObjectGetProcessor, который наследует процессор в get.class.php, нет метода prepareQueryBeforeCount(xPDOQuery $c), так что же мне переопределять? Как поджоинить данные?
Там есть другие методы, например cleanup готовит вывод массива.
Джойнить в get ничего не нужно, ибо всегда выбирается только один ресурс.
Джойнить в get ничего не нужно, ибо всегда выбирается только один ресурс.
Спасибо, переопределил, все ок.
Единственно, насколько принято писать так
Единственно, насколько принято писать так
,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 }
?
Мне больше нравится передавать через config, но это уж сам выбирай, как удобнее.
Но в функции update в row лежат только данные строки таблицы, которую мы редактируем (т.е. А), данных, полученных в getlist.class.php там нету.А что указано в fields?
Да данные из А, + немного связанных данных из Б + pagetitle документа, с id == Б.resource_id
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.