Вывод количества всех просмотров ресурсов

Добрый день! С помощью данного сниппета пытаюсь выводить количество всех просмотров ресурсов добавленных пользователем. Проблема в том, что ресурсов более 1000, и из-за этого данный сниппет выполняется очень долго. Как можно ускорить выполнения данного сниппета? Или есть способ реализации по проще?

$output_alluser = $modx->runSnippet('pdoUsers',array(
    'groups' => 'manager_main',
    'tpl' => '@INLINE {{+id}},'
));
$idmanager= isset($idmanager) ? $idmanager: $output_alluser;

$output = $modx->runSnippet('getTickets',array(
    'user' => $idmanager,
    'showUnpublished' => '1',
    'parents' => '0',
    'tpl' => '@INLINE {{+views}},',
    'limit' => '0',
    'fastMode' => '1',
));
$output = substr($output, 0, -1);
$str_views = split(",", $output);
echo array_sum($str_views);
Алексей Соин
10 февраля 2016, 11:17
modx.pro
1
1 100
0
Поблагодарить автора Отправить деньги

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

Иван Сергеевич
10 февраля 2016, 22:26
0
Примерно как-то вот так:
$user_id = $modx->user->get('id');

$totalquery = $modx->newQuery('Ticket', array('class_key' => 'Ticket','published:>=' => 0,'deleted' => 0, 'createdby' => $user_id));
$totalquery->prepare();
$totalquery->stmt->execute();
$restotalquery = $totalquery->stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($restotalquery)){
$parent_iduser = 0;
}else{
foreach ($restotalquery as $rowtotalquery){
$parent_iduser[] = $rowtotalquery[Ticket_id].',';
}
$parent_iduser = chop(join($parent_iduser), ' ,');
$modx->toPlaceholder('total_id',$parent_iduser);
}

$sql = "SELECT parent, timestamp, COUNT(DISTINCT uid) as uid 
FROM `modx_tickets_views`
WHERE parent IN($parent_iduser)
group by parent 
having count(uid) >= 1
";
$query = new xPDOCriteria($modx, $sql);
if ($query->prepare() && $query->stmt->execute()){
$res = $query->stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($res as $row){
$views += $row[uid];
$modx->toPlaceholder('total_views',$views);
}
}

echo "
<p>Просмотров всего: [[+total_views]]</p>

<p>ID тикетов пользователя: [[+total_id]]</p>";
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
2