Редактируемые таблицы для MODX
При написании компонентов для MODX много времени уходит на программирование редактируемых таблиц через extJs. У меня на это уходит каждый раз до 4 часов . Причем на совершенно однотипные таблицы. В конце концов мне это надоело и я решился написать свой компонент редактируемых таблиц на основе bootstrap и pdoTools— getTables! Сложность задачи я сильно недооценил и компонент сейчас выглядит и исполнен ужастно, но время на программирование таблиц с ним сократилось до 5 минут на простую и до часа на более сложную. Это сильно помогает и getTables я постоянно использую и потихоньку допиливаю. Сейчас на его основе сделано несколько компонентов, которые я хочу выложить в общий доступ. Ну и приходиться выкладывать и getTables, несмотря на не самую лучшую его реализацию.
Есть, конечно, замечательный компонент MIGX, но чтобы его использовать на фронте нужно вытаскивать на фронт extJs ради пары табличек. А bootstrap у меня везде используется.
Для примера вот реализация админки компонента вопросов-ответов gtsReview на getTables.
Имя
|
Сайт
|
Фио менеджера
|
Описание | Действия | |
---|---|---|---|---|---|
Фирма
|
Название сделки
|
Дата сделки
|
Описание |
Рейтинг
|
Активно
|
Действия | |
---|---|---|---|---|---|---|---|
|
Код вызова [ [!getTabs? &config=`gtsreview_admin`]]. Инструкция config загружает gts-код табов и таблиц из системной настройки gtsreview_admin в JSON формате. Посмотреть код можно на GitHub
Основы gts-синтаксиса
Код самой простой таблицы выглядит так:
{'getTable' | snippet : [
'loadModels'=>'raschets',
'table'=>[
'class'=>'raschetsMatClass',
'actions'=>[
'create'=>[
],
'update'=>[
],
],
'pdoTools'=>[
'class'=>'raschetsMatClass',
'limit'=>0,
],
'checkbox'=>0,
'autosave'=>1,
'row'=>[
'id'=>[
],
'label'=>[
'label'=>'Имя',
'filter'=>1
],
],
],
]}
Инструкция loadModels говорит какую модель (базы) MODX загрузить. (Модель пока удобнее создавать через MIGX.)
В table задаются все параметры таблицы:
- class — класс таблицы.
- actions — что можно сделать с таблицей. Для того, чтобы в таблице можно было удалять строки достаточно добавить в action инструкцию ‘remove’=>[],.
- pdoTools — данные в таблицу из базы подготавливает pdoTools. И здесь можно использовать все его параметры.
- checkbox — включить выбор строк чекбоксами.
- autosave — инлайн редактирование данных таблицы. (Для autosave нужно чтоб action update было включено.)
- row — здесь задаются колонки таблицы, которые показываются и редактируются.
id |
Имя
|
Действия |
---|---|---|
1 | ||
2 | ||
3 | ||
4 | ||
13 | ||
14 | ||
15 | ||
16 | ||
17 | ||
18 | ||
19 | ||
20 | ||
21 | ||
22 | ||
23 | ||
24 | ||
25 | ||
26 | ||
27 | ||
28 | ||
29 | ||
30 | ||
31 | ||
32 | ||
33 |
Таких простых простых таблиц за полгода я уже насоздавал штук 40. Делать их все через extJs было бы очень долго.
Более подробная справка Основы gts-синтаксиса
Ссылка на GitHub