MODX/AI Hackathon Part 2 (27 марта)

Дорогие друзья MODX,

Простите за мой ужасный русский – мне приходится полагаться на такие инструменты, как ChatGPT и Google Translate. 😅 Но несмотря на это, я хочу пригласить вас на MODX-мероприятие на следующей неделе!

Присутствовать лично может быть непросто, но, как и наши коллеги из России и Сербии, вы сможете присоединиться онлайн.

Ниже – перевод на русский, а затем оригинальный английский текст. Если перевод получился ужасным, у вас хотя бы есть исходник. 😉

Привет из Нидерландов!

Henk Everts
19 марта 2025, 10:39
modx.pro
436
+12

Необходимо доработать API сделанное на modx, добавить блокировку по IP при частых запросах.

Добрый день.
Отвечать буду только людям с рейтингом на modx.

Описание
Есть мобильное приложение. В данный момент ошибочно (спам) было разослано более 50.000 смсок с приложения на различные номера телефонов.

Задачи
№1) Ограничения по IP backend
Первые 3 запроса с одного IP — раз в минуту.
После этого — раз в час.
И после 3-х в час — блокировка на день.

Нужно будет обновить UI, чтобы показывать ошибку 429 (слишком много запросов) и объяснять пользователю, что нужно подождать перед следующей попыткой.

№2) Ограничения по телефону — То же самое, только по номеру телефона.

В UI тоже нужно показывать ошибку 429, чтобы пользователи понимали, что нужно подождать.
anhel123
19 марта 2025, 10:26
modx.pro
140
0

Какие права доступа нужно давать пользователям для удаление своих записей

Всем привет, сделал добавление и изменения записей со стороны фронтенда и хотел сделать еще удаление записей, но проблема в том, что у админа удаление работает, а у пользователей нет. В журнале ошибок выскакивает ошибка, что у пользователя нет прав на удаление. Когда пользователь нажимает на ссылку «Удалить», то появляется просто текст Array. Сейчас стоит web, member-9999, load,list and view, но пробовал ставить разные политики доступа, ничего не меняется.
Код сниппета
<?php
if (!empty($_GET['action']) && $_GET['action'] === 'delete' && !empty($_GET['resourceId'])) {
    $resourceId = intval($_GET['resourceId']);
    $resource = $modx->getObject('modResource', $resourceId);

    // Проверка, существует ли ресурс
    if (!$resource) {
        $modx->log(modX::LOG_LEVEL_ERROR, 'Ошибка: Ресурс с ID ' . $resourceId . ' не найден.');
        return $modx->error->failure('Ресурс не найден.');
    }

    // Проверка прав доступа
    if (!$modx->hasPermission('delete_document')) {
        $modx->log(modX::LOG_LEVEL_ERROR, 'Ошибка: У пользователя нет прав на удаление ресурса с ID ' . $resourceId);
        return $modx->error->failure('У вас нет прав на удаление этого ресурса.');
    }

    // Проверка, является ли текущий пользователь создателем ресурса
    $userId = $modx->user->get('id');
    if ($resource->get('createdby') != $userId) {
        $modx->log(modX::LOG_LEVEL_ERROR, 'Ошибка: Пользователь с ID ' . $userId . ' пытался удалить чужой ресурс с ID ' . $resourceId);
        return $modx->error->failure('Вы можете удалять только свои записи.');
    }

    // Удаление ресурса
    if ($resource->remove()) {
        $modx->log(modX::LOG_LEVEL_INFO, 'Ресурс с ID ' . $resourceId . ' успешно удален пользователем с ID ' . $userId);
        // Перенаправление после успешного удаления
        $modx->sendRedirect($modx->makeUrl($modx->getOption('site_start'), '', '', 'full'));
    } else {
        $modx->log(modX::LOG_LEVEL_ERROR, 'Ошибка: Не удалось удалить ресурс с ID ' . $resourceId);
        return $modx->error->failure('Не удалось удалить ресурс.');
    }
}
Ссылка на удаление
a href="[[~[[*id]]]]?action=delete&resourceId=[[+id]]" onclick="return confirm('Вы уверены, что хотите удалить этот ресурс?');">Удалить ресурс</a>
Может кто в курсе какие права доступа вставлять или может я вообще неправильно все делаю.
Илья
18 марта 2025, 11:58
modx.pro
468
0

Как импортировать msProductOptions данные через miniShop2 утилиту Импорт?

Как импортировать msProductOptions данные через miniShop2 утилиту Импорт? Будет ли работать это решение?



modx.pro/solutions/12280

Если да, что нужно добавить в файлы csv.php и importCSV.php, чтобы работало через утилиту?

Спасибо
Trying
17 марта 2025, 17:53
modx.pro
43
0

Вывод полей в таблице заказов minishop2

Приветствую!
Столкнулся с задачей изменить таблицу заказов minishop2.
Но на просторах интернета, так и не нашел подобного решения.
Существуют внятные и понятные (даже для моего уровня программирования) статьи о том как добавить новое поле, к примеру в закладку адрес, но вот по работе с самой таблицей, информации очень мало.

Если более детально описать, то требуется в таблицу с заказами вывести любое поле из таблицы ms2_order_addresses.

У меня получилось добавить новые колонки в таблице, но они пусты. На сколько я понимаю, в момент генерации таблицы нет запроса к ms2_order_addresses, сама таблица работает с ms2_orders.



На скрине колонка «Адрес получателя» живет аккурат в таблице ms2_order_addresses и пуста.

Буду благодарен помощи!

Обновление 19.03.2025
Благодаря персту указующему, в лице Евгений Webinmd я смог разобраться.

Немного забегая вперед, данный текст я пишу из двух умыслов.
Во-первых, я скромно надеюсь, что кому-то это будет полезно, а во-вторых, будет здорово, если кто-то укажет мне на мои ошибки и недочеты, т.к. мой уровень программирования, ограничивается if else и echo «Hello, world!»; =))) А если уж совсем на чистоту, из всего кода, который я буду приводить ниже, я 70% не понимаю, от слова совсем!

И так, приступим!
Дмитрий
16 марта 2025, 22:46
modx.pro
133
0

MODX RSC | Telegram Karma Bot

Всем привет, хочу поделиться телеграм ботом, который был разработан для нашего основного чата.

🤖 Telegram-бот для управления кармой пользователей в чате. Бот добавляет или убирает карму, банит пользователей за рекламу и отображает топ пользователей по карме.



Бот создаёт и управляет пользователями в MODX.
Не стал особо придумывать велосипедов, но если вам будет нужно как то иначе его подстроить под сайт, думаю разберётесь.

А так же я интегрировал в бота OpenAI GPT-3.5



Что бы он ответил, при написании вопроса в любом порядке пишем «ИИ ответь тоже»

Все подробности на Github
Денис Усманов
16 марта 2025, 00:30
modx.pro
324
+11

Не выводятся данные пользователя в профиле

Всем привет!
Сделал регистрацию и авторизацию с Login, затем сделал личный кабинет и все это работает. Захотел сделать страницу профиль пользователя, чтобы другие могли посмотреть.
Илья
14 марта 2025, 17:36
modx.pro
125
0

Получить ALT изображения в сниппете ms2GalleryResources на fenom

Не могу на fenom получить alt или name изображения ms2Gallery в сниппете ms2GalleryResources.
{$file['name']} даёт пустое значение. Без fenom работает [[+small.alt]], по аналогии {$small['alt']} — даёт / (слэш)

Прикреплю код сниппета. Если тыкнете в строчку, где подсказка, буду рад. Сам нашел $thumb.alt на 69 строке, но ребус разгадать все-равно не могу.
Павлик Мышкин
13 марта 2025, 15:57
modx.pro
105
0

MIGx. Listbox. Fenom. Вставка label вместо value.

Имеется список listbox с данными:
Библиотека №3 == library_3 || Библиотека №15 == library_15.

В одном месте в чанке нужно вставить label, то есть название, например «Библиотека №3»:
{$row.calendarEventsPlace}
А вдругом месте вставить соответствующее label value, library_3:
data-lib="{$row.calendarEventsPlace}"
Value вставляется по-умолчанию, а как вставить название в код, чтобы не создавть дополнительное поле в конфигурации?
Александр
13 марта 2025, 10:33
modx.pro
214
0

Обновление Impex и Impex3

Всем привет.
Вышли версии 1.0.4 обоих пакетов с новыми полезными функциями. 
  • Добавлена возможность копирования существующей конфигурации.
  • Добавлена возможность удаления файлов по отдельности (конфигураций, файлов импорта/экспорта, бэкапов).
  • Добавлено системное событие OnImpexBeforeSetParentProduct, вызываемое перед обработкой родительской категории.
  • Добавлено системное событие OnImpexBeforeFieldImport, вызываемое перед импортом конкретного поля.
  • Во все события плагинов добавлена переменная $config_name — имя файла конфигурации.
  • Добавлен плагин Impex с примерами.
  • В конфигурации добавлен параметр category_id_field для указания поля категории, содержащее её уникальный идентификатор.
  • В конфигурации добавлен параметр skip_new, для пропуска при импорте отсутствующих на сайте позиций (только обновление существующих).
  • В плагине на событие OnImpexAfterResourceImport (после импорта ресурса) теперь доступен массив $data со всеми загруженными данными.
  • Исправлены небольшие ошибки + добавилась проверка версии PHP и MODX при установке.

Павел Романов
13 марта 2025, 09:40
modx.pro
307
+3