Сергей Шлоков

Сергей Шлоков

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
Позволю себе выложить решение с помощью modHelpers.
$usergroup = 1;
users()
        ->profile()
        ->select(['modUser.id, modUser.username, Profile.fullname, Profile.email' ])
        ->members($usergroup )
        ->where(['active' => true])
        ->each(function($user) {
              foreach($user as $key => $value) {
                  echo $key, ": ", $value, "< br>";  // Убрать пробел
              }
              echo "< br>";  // Убрать пробел
              // Ну и всем пользователям группы указываем значение потраченных денежек на покупку
              object('msCustomerProfile',$user['id'])->set(['spent' => 15000]);
});
// Сбрасываем кэш (если нужно)
$modx->cacheManager->refresh();
Но это, конечно, очень не оптимально.Такой код оправдан только если нужно выводить данные каждого пользователя. Вопрос — а нужно ли?

Вот оптимизированный вариант. Всего 2 запроса к БД
$usergroup = 1;
$ids = users()
        ->members($usergroup)
        ->where(['active' => true])
        ->get('id');

collection('msCustomerProfile', ['id:IN' => $ids])->set(['spent' => 15000]);

// Сбрасываем кэш (если нужно)
$modx->cacheManager->refresh();
По-моему, выглядит покороче и попроще )
У меня только один вопрос — зачем в цикле сбрасывать кэш сайта? Хотя есть ещё один — а нужно ли вообще его сбрасывать?

П.С. Кроме того, не понятно, зачем подгружать коллекцию объектов для того, чтобы потом перевести в массив?
Есть вопрос. Возможно ли отфильтровать данные по диапозонам ip адресов?
siteStatistics ведёт статистику. А вот анализом придётся заняться самому. Можно через pdoResources.

Как получить статистику например увидеть на каких страницах были клиенты?
Открываете список пользователей и кликаете на кнопку «Статистика по ресурсам».
Моё мнение — данная фича вообще не нужна в ядре. Вещь специфическая — одному нужно так, другому эдак. Причем в первом ресурсе нужно указать шаблон. Иначе у всех остальных тоже будет пусто. Это нужно держать в голове.
Эту задачу можно легко решить через плагины.