Кейс 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. Забыл плагин.
Ставим 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;
}
Создал телеграм канал: Канал для обсуждения и помощи с компонентом gtsAPI (MODX). Можно обсуждать и другие вопросы: MODX, PVTables, getTables, UserTest и т.д. https://t.me/gtsapi
Поблагодарить автора
Отправить деньги