Александр Туниеков

Александр Туниеков

С нами с 19 декабря 2015; Место в рейтинге пользователей: #11
Александр Туниеков
14 октября 2025, 18:11
0
Полез смотреть код и похоже @ВитОс его откатил :-(. Пустые коммиты только вижу.
Александр Туниеков
19 сентября 2025, 21:27
0
Специально для тебя. Купил поставил компонент и разобрался с ошибкой :-).
В файле core/components/msorderfields/model/msorderfields.class.php заменить строку 234 на
$query->sortby('`rank`', 'asc');
То есть поставить кавычки у rank. Вроде все работает. Если что-то не работает, то искать где rank без кавычек в sql уходит.
Если хочешь отблагодарить, то стоимость пакета 490р плюс час работы 1000р. Ссылка отправить деньги в профиле.
Александр Туниеков
19 сентября 2025, 19:37
0
Забыл что платное… Но 490р и 180 загрузок. Около 60т.р. Делалось неделя две. Ну расход на уровне дохода (плюс минус в 2 раза).
Александр Туниеков
19 сентября 2025, 18:54
0
Предлагаю автору дополнения пробежаться по коду и поправить)
Красавчик. Вот автор взял и побежал править. На дня 3 упорной отладки :-). Я у автора копировал файл менеджера допполей и адаптировал под себя. На mySQL8 не смотрел, но на modx3 пробовал переделать. Сделал, но не долго работало. Что-то не доправил.
Для себя решил сижу на modx2.8, myqsl 5.7, php7.4 и не парюсь над этими новыми ихними замутами. Разобраться можно, но дорогостояще по времени и нервам.
Александр Туниеков
19 сентября 2025, 18:18
0
Сложностей мне и так хватает. У меня gtsAPI используется в работе. А для документации и кейсов делать слишком длинные уроки разве разумно?
Александр Туниеков
19 сентября 2025, 18:12
0
в таком случае мы лишаемся пост обработки…
Верно. Поэтому у меня есть триггеры, корорые можно привязать к какой-то операции, и кастомные действия, которые можно сделать иногрируя стандартные. Это вообще-то минус что так приходиться делать, но вот есть 10 таблиц и кастомное действие требуется только на одной

То есть, экономия времени, как я считаю большая.

повторюсь еще раз стандартный extJS никак не ограничивает бекенд
Ну extJs не ограничивает. Просто множество процессоров стандартная методика в MODX. Которая, как я считаю, является скучной и бессмысленой работой :-). Так то можно написать аналог gtsAPI для extJs. Только мне это не требуется. А вообще первоначально я вдохновлялся migx. gtsAPI для таблиц — это, грубо говоря, тот же самый migx для vue. А дерево UniTree это развитие этой идеи на деревья.
Александр Туниеков
19 сентября 2025, 13:08
0
вот это для меня вообще не очень понятно… я правильно понимаю, что вы в 1 файл запихали весь функционал и говорите, что это лучшее решение?
Хм… С одной стороны весь функционал не в 1 файле. Там много файлов во всем функционале. Проще писать по сравнению с extJs и некоторыми знакомыми мне апи. Я особо много их не знаю. По сравнению с extJs. В нем для создания, редактирования, чтения и удаления записи из 1 таблицы надо написать обработку этих операций в js и написать 4 процессора в php. А в gtsAPI операции CRUD для любой таблицы уже реализованы. Их надо только включить и задать права доступа.
Александр Туниеков
19 сентября 2025, 12:54
0
Тикетс уже самолет. На уроков 10 объяснений как и что :-).
Александр Туниеков
19 сентября 2025, 04:38
0
Может у кого-нибудь есть идея какое приложение написать в качестве демонстрации возможностей? Такое как Sendex, которое Василий написал как демонтстацию extJs.
Александр Туниеков
19 сентября 2025, 04:25
0
не обессудьте но с такой документацией — это очень наврятли.
Тут преодолеть порог входа. Мне как создателю почти все понятно и очевидно, а другим думаю чтоб въехать напрячься, потратить время, надо. Это барьер который мешает другим и освоить и развивать другим. И мне не особо понятно как писать документацию, чтоб другим легче было.
то тут все что угодно
Да все что угодно и на более современном фреймворке (vue) и быстрее, когда въедешь, чем и на extJs и на других апи. За счет того, что не надо писать кучу контроллеров.
Только не понятно как документацию свести в удобную систему. Как всегда сперва hello word, а затем сразу строим самолет :-).
Александр Туниеков
18 сентября 2025, 01:09
0
Что РКН с инетом делает?? гитхаб не открывается, а впн помогло :-(
Александр Туниеков
17 сентября 2025, 22:53
0
К сожалению, не понимая думаю можно наделать других дырок. Попробовал проверить на уязвимость из https://habr.com/ru/articles/130826/ .

Вроде не уязвимо :-). Почти все через pdoFetch идет. Только иногда использую сложное условие вроде (id IN (2,3) and (parent = 4 or parent IS NULL)) в where. Тогда… хм. проверю :-).

Код для проверки:
<?php
$pdo = $modx->getService('pdoFetch');
$id = $_GET['id'];
$pdo->setConfig([
    'class'=>'modResource',
    'where'=>[
        0=>"(id = $id and (parent = 4 or parent = 0))"
    ],
    'limit'=>0,
    'return'=>'data'
]);

$ress = $pdo->run();
foreach($ress as $res){
    echo "<p>{$res['id']}</p>";
}
echo '<pre>'.$pdo->getTime().'</pre>';
На запрос gettables.ru/test.html?id=4+OR+1 выдало:
1

2

3

4

5

6

7

14

16

19

20

21

22

25

30

0.0000529: xPDO query object created
0.0000019: Processed additional conditions
0.0000720: Added where condition: 0=(id = 4 OR 1 and (parent = 4 or parent = 0))
0.0000749: Sorted by modResource.id, ASC
0.0002530: SQL prepared "SELECT * FROM `modx_site_content` AS `modResource` WHERE (id = 4 OR 1 and (parent = 4 or parent = 0)) ORDER BY modResource.id ASC "
0.0014510: SQL executed
0.0000789: Rows fetched
0.0000720: Returning raw data
0.0167792: Total time
4 194 304: Memory usage
Выдало все id страниц. То есть
'where'=>[
        0=>"(id = $id and (parent = 4 or parent = 0))"
    ],
Уязвимо для инъекций. Будем знать.
Александр Туниеков
17 сентября 2025, 21:41
0
Безопасность MODX для меня не слишком понятная тема. Когда то искал как безопасно писать запросы в базу. Нашел только приводить к инт все id получаемые с фронта. И плюс вырезать из получаемого с фронта теги MODX и fenom. Было бы интересно увидеть разбор безопасности MODX, при запросах в базу. И увидеть примеры атак, чтобы знать от чего защищаться.
Александр Туниеков
17 сентября 2025, 13:13
+3
Сложный вопрос. Застали в расплох. Как правильно ответить долго думать. Попробую ответить как смогу. Не обессудте.
Как правильно заметил @Futuris, у нас сложный технологический процесс, и запрограммировать множество технических параметрев деталей на extJs очень долго. Для примера, я в начале года пытался перевести тикеты на modx3. Так в них 50 процессоров для разных действий (https://github.com/tuniekov/Tickets/tree/master/core/components/tickets2/src/Processors). gtsAPI устроен так, что ему не нужны куча контролеров. Прописываешь настройки доступа и отображения для таблицы и всем процессом управляет 1 уже написанный контроллер. Это в разы сокращает время написания приложения. Хотя и вносит некоторые ограничения :-). Так вот, чтобы прописать нужный нам функционал на extJs, наверно бы потребовалось написать 500-1000 процессоров.
В примере админки на Vue, PVAdmin, я написал в основном, только нужный нам функционал для менеджеров и инженеров ИТР. Полностью повторять админку MODX у меня задача не стояла. Для стандартных целей админка MODX меня полностью устраивает. Админка PVAdmin, в текущей реализации, нужна только если програмировать сложный функционал или нет желания пускать пользователей в стандартную админку MODX.
Но программировать на Vue с gtsAPI, по моему, гораздо проще, чем на extJs. Если писать приложения вроде Tickets для PVAdmin, то может быть, со временем админка на Vue будет удобнее для обычных сайтов. Пока Tickets для PVAdmin не планирую, но есть некоторый соблазн :-).

Как ими воспользоваться?
Я пишу документацию временами и почти не получаю обратную связь от других разработчиков и пользователей. Так что сейчас документация не слишком хороша. Надеюсь, это исправиться. Преимущества Vue с gtsAPI в том что можно быстрее и проще програмировать компоненты для PVAdmin.
Мои заметки по gtsAPI:
UniTree новые возможности gtsAPI-PVTables
Кейс gtsAPI. CRUD пользователей на фронте
gtsAPI — Универсальное API для MODX
Введение в PVTables
Компонеты для gtsAPI проще писать на основе https://github.com/tuniekov/PVExtra. В readme инструкция.
Сейчас изучать gtsAPI наверно проще по примерам:
https://github.com/tuniekov/OrgStructure
https://github.com/tuniekov/PVAdmin/.
Основные файлы:
В файле _build\configs\gtsapipackages.js настройки таблиц для gtsAPI. По ним gtsAPI и PVTables формируют доступное API и таблицы, деревья, формы на фронте.
В файле core\components\pvextra\model\schema\pvextra.mysql.schema.xml MODX схема базы данных
В файле core\components\pvextra\model\pvextra\pvextra.class.php класс MODX компонента. Триггеры и кастомные действия обращаются в него.
src/App.vue код приложения на vue.

В папке https://github.com/tuniekov/PVExtra/tree/main/docs документация ИИ для ИИ. Часто в нейросеть пишу промпт: Прочитай docs/use_gtsapipackages.md и напиши конфиг для таблицы tableName (например, modUser или modUserProfile).

Надеюсь хорошо ответил… Буду рад если gtsAPI вас заинтересует.
Александр Туниеков
17 сентября 2025, 01:42
0
А чем она должна быть лучше??? Просто тупо програмирую интерфейс пользователя без extjs. У меня там много всякого. На extjs гемор это делать. Vue удобней.
Александр Туниеков
01 июня 2025, 17:41
0
Печалька. Вот казалось человек а на проверку мнит себя самым умным :-(
Александр Туниеков
27 мая 2025, 15:34
0
Мда… не думал, что тебя так критика зацепит.
У Василия в минишопе обновления версии js скриптов через гет-параметы встроенно. Меняется версия минишоп — меняется гет-параметр. Я так же делаю. Тебе нужно подумать, чтобы при обновлении js они автоматически в браузере обновлялись. А то сделаешь ты обновление mscdek через полгода и на всех сайтах у их постоянных клиентов mscdek отвалится и владельцы сайтов потеряют клиентов. Веская причина?
Искал в чем причина ошибки 4 часа. ctrl+shift+r я всегда делаю и стем что оно не срабатывает первый раз столкнулся. Так что даже не подозревал, что скрипты старые в браузере. Пришлось дебажить и изучать mscdek и sendit. Как они работают. В итоге разобрался, что header x-sipreset не верный, нашел где он отправляется, а потом уже проверил что за js в установочном пакете.
4 часа дебажить такую ошибку не так уж и долго :-).
Надеюсь, что ты все-таки воспримешь это от меня как фидбек :-)
Александр Туниеков
27 мая 2025, 14:58
0
Ты действительно потратил 4 часа на то, чтобы понять, что браузер берёт файлы из кэша
да потратил. Бывают вот такие мутные приложения
Александр Туниеков
27 мая 2025, 14:57
0
добавь get-параметры к пути
к каким путям? где это прописывать? Я в твоих di контейнерах с трудом разбираюсь. Если было как обычно сделано я бы не спрашивал.
Александр Туниеков
27 мая 2025, 14:56
0
добавь get-параметры к пути
к каким путям? где это прописывать? Ты нормально приложение не можешь сделать?