Кейс gtsAPI. CRUD пользователей на фронте
gtsAPI и PVTables специально предназначены для быстрого программирования CRUD в MODX. Сейчас, покажу как их использовать для быстрого создания интерфейса редактирования пользователей.
Ставим gtsAPI с модсторе gtsapi. Пакет предназначен для MODX2. На MODX3 работа дополнения не гарантируется. $modx->loadClass обещают убрать в MODX 3.3. Тогда в MODX3 пакет перестанет работать.
В админке заходим в Пакеты->gtsAPI. Во вкладке «Пакеты MODX» создаем запись modx. Во вкладке «Таблицы АПИ» заводим описание таблицы к которой нужно получить доступ по API.
Нужные поля:
Пакет: modx
Имя таблицы: modUser2
Класс таблицы: modUser
Ограничение только для групп пользователей (имена груп через запятую): Administrator
Класс таблицы — это имя класса MODX описывающего таблицу в базе. Если в Имя таблицы сразу прописать этот класс, то в Класс таблицы можно ничего не писать.
Ограничение только для групп пользователей — какие группы пользователей будут иметь доступ к АПИ. Пропишите нужную вам группу. Вместо группы можно использовать Разрешения MODX.
Во вкладке properties выбираем Тип таблицы: Таблица
В поле Свойства вставляем JSON
query — описыват mySQL запрос в базу для чтения данных в формате pdoFetch.
И, наконец, на любую страницу MODX помещаем сниппет:
PS. Забыл плагин.
1) PVExtra
2) Триггеры и handleRequest
3) subtables
4) Таблица JSON
5) Синтаксис АПИ.
Напишите плиз как вам интересны эти темы? Мне сейчас не очень понятно стоит ли все расписывать :-).
Создал телеграм канал: Канал для обсуждения и помощи с компонентом gtsAPI (MODX). Можно обсуждать и другие вопросы: MODX, PVTables, getTables, UserTest и т.д. https://t.me/gtsapi
Ставим gtsAPI с модсторе gtsapi. Пакет предназначен для MODX2. На MODX3 работа дополнения не гарантируется. $modx->loadClass обещают убрать в MODX 3.3. Тогда в MODX3 пакет перестанет работать.
В админке заходим в Пакеты->gtsAPI. Во вкладке «Пакеты MODX» создаем запись modx. Во вкладке «Таблицы АПИ» заводим описание таблицы к которой нужно получить доступ по API.
Нужные поля:
Пакет: modx
Имя таблицы: modUser2
Класс таблицы: modUser
Ограничение только для групп пользователей (имена груп через запятую): Administrator
Класс таблицы — это имя класса MODX описывающего таблицу в базе. Если в Имя таблицы сразу прописать этот класс, то в Класс таблицы можно ничего не писать.
Ограничение только для групп пользователей — какие группы пользователей будут иметь доступ к АПИ. Пропишите нужную вам группу. Вместо группы можно использовать Разрешения MODX.
Во вкладке properties выбираем Тип таблицы: Таблица
В поле Свойства вставляем JSON
{
"actions": {
"read": [],
"create": [],
"update": [],
"delete": []
},
"query":{
"class":"modUser",
"leftJoin":{
"modUserProfile":{
"class":"modUserProfile",
"on":"modUserProfile.internalKey = modUser.id"
}
},
"select":{
"modUser":"modUser.id",
"modUserProfile":"modUserProfile.fullname,modUserProfile.email,modUserProfile.phone"
},
"where":{
"modUser.primary_group":3,
"modUser.active":1
},
"sortby":{
"modUser.id":"DESC"
}
},
"class_link":{
"modUserProfile":{
"internalKey":"id"
}
},
"fields": {
"id": {
"type": "view",
"class": "modUser"
},
"fullname": {
"label": "ФИО",
"type": "text",
"class": "modUserProfile"
},
"email": {
"label": "email",
"type": "text",
"class": "modUserProfile"
},
"phone": {
"label": "Телефон",
"type": "text",
"class": "modUserProfile"
}
}
}
actions — описыват какие операции разрешены. В них можно указать группы и разрешения MODX, которым эта операция разрешена. Например:"delete": {
"groups":"Administrator,hr"
}
В fields для поля должно быть указано имя самого поля, type и class. class нужен, чтобы можно было редактировать сразу несколько таблиц. Здесь, например, при создании пользователя в таблице modUser сразу создастся запись в таблице modUserProfile. Инструкция class_link сообщяет как искать запись в таблице modUserProfile."class_link":{
"modUserProfile":{
"internalKey":"id"
}
},
Для записи полей с классом modUserProfile в базу ищется запись в таблице modUserProfile, где internalKey равно полю id основного класса modUser.query — описыват mySQL запрос в базу для чтения данных в формате pdoFetch.
И, наконец, на любую страницу MODX помещаем сниппет:
{'!PVTable' | snippet : [
'table'=>'modUser2'
]}
И на этой странице мы уже можем редактировать пользователей :-). Стандартный CRUD делаестя через gtsAPI за 10-30 минутPS. Забыл плагин.
<?php
switch ($modx->event->name) {
case 'gtsAPIRunTriggers':
if($class == 'modUser' and $type == 'before' and $method == 'create' and $object){
// $modx->log(1,'gtsAPIRunTriggers $object_new'.print_r($object_new,1));
$object->set('username',$object_new['email']);
$object->set('password',md5(date('d.m.Y H:i:s')));
// $modx->log(1,'gtsAPIRunTriggers '.print_r($object->toArray(),1));
$modx->event->returnedValues['object'] = $object;
}
if($class == 'modUser' and $type == 'after' and $method == 'create' and $object){
$object->joinGroup(3);
$object->save();
}
break;
}
В дальнейшем планирую заметки на темы:1) PVExtra
2) Триггеры и handleRequest
3) subtables
4) Таблица JSON
5) Синтаксис АПИ.
Напишите плиз как вам интересны эти темы? Мне сейчас не очень понятно стоит ли все расписывать :-).
Создал телеграм канал: Канал для обсуждения и помощи с компонентом gtsAPI (MODX). Можно обсуждать и другие вопросы: MODX, PVTables, getTables, UserTest и т.д. https://t.me/gtsapi
Поблагодарить автора
Отправить деньги
Комментарии: 3
ну тогда groupby и having
+ подгрузка не родных пакетов
есть?
еще я правильно понимаю что фильтрация и сортировка по умолчанию по всем полям?
+ подгрузка не родных пакетов
есть?
еще я правильно понимаю что фильтрация и сортировка по умолчанию по всем полям?
$object->set('password',md5(date('d.m.Y H:i:s')));
как потом этим пользоваться? ну тогда groupby и having
«query» принимает все параметры pdoFetch и в нем есть и groupby и having. Пример навскидку:"query":{
"class":"modUser",
"leftJoin":{
"modUserProfile":{
"class":"modUserProfile",
"on":"modUserProfile.internalKey = modUser.id"
}
},
"select":{
"modUser":"modUser.id",
"modUserProfile":"modUserProfile.fullname,modUserProfile.email,modUserProfile.phone"
},
"where":{
"modUser.active":1
},
"groupby":"modUser.primary_group",
"having":{
"count(*) > 3"
},
"sortby":{
"modUser.id":"DESC"
}
}
Вроде такой запрос должен работать. «count(*) > 3» не уверен, что правильно составил.+ подгрузка не родных пакетов«loadModels»
{
"actions": {
"read": [],
"create": [],
"update": [],
"delete": []
},
"loadModels" :"modextra,gtsshop",
...
еще я правильно понимаю что фильтрация и сортировка по умолчанию по всем полям?Да правильно.
$object->set('password',md5(date('d.m.Y H:i:s')));Хм. взял пример из Создание CRUD интерфейса вне админки. Не знаю зачем там случайный пароль ставили. Просто повторил на gtsAPI. Можно добавить поле password в таблицу и можно будет ставить пароль. Но прочитать его нельзя. MODX кеш пароля выдаст.
как потом этим пользоваться?
У нас пароли юзеров храняться в текстовом файле у меня. Так нам удобнее и я думал сделать интерфейс отделу кадров, чтоб они могли поставить и прочитать пароль. То есть сохранить его плагином в extended (Лучше редактировать extended, а password менять плагином). Но пока не до этого и директору может не понравиться.
Кстати extended, то есть JSON поле gtsAPI уже может редактировать.
"fields":{
"extended.pass":{
"label":"Пароль",
"type":"text"
}
}
Но типа поля password еще нет. Он мне еще не нужен был.Как использовать плагины, наверно, не очень понятно. Надо описать триггеры. Думал попозже сделать.
Интересно, продолжайте.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.