Кейс 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
{
        "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
Александр Туниеков
3 часа назад
modx.pro
25
0
Поблагодарить автора Отправить деньги

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0