Руслан Кундиус

Руслан Кундиус

Был в сети 25 апреля 2021, 15:18
Заказы принимаю
Нужно создать раздел кеша, в первом комментарии об этом речь.

Пример выше в виде сниппета будет выглядеть так:
$options = array(
    xPDO::OPT_CACHE_KEY => 'mypartition'
);
if (!$snippet = $modx->cacheManager->get('cache_key', $options)) {
    $snippet = $modx->runSnippet('pdoResources', array(
        'parents' => 0,
        'tpl' => '@INLINE {$id} - {$pagetitle}',
        'showLog' => 1
    ));
    $modx->cacheManager->set('cache_key', $snippet, 1800, $options);
}

return $snippet;
Думаю Алексей имел ввиду что-то вроде этого:
{'pdoResources' | snippet : [
    'loadModels' => 'xLike',
    'where' => [
        'xlVote.class' => 'modResource'
    ],
    'leftJoin' => [
        'xlVote' => [
            "class" => "xlVote",
            "on" => "modResource.id = xlVote.parent"
        ]
    ],
    'select' => [
        'modResource' => '*',
        'xlVote' => [
            'COUNT(xlVote.value) as total',
            'SUM(xlVote.value = 1) as likes',
            'SUM(xlVote.value = -1) as dislikes'
        ]
    ]
]}
Можно даже рейтинг посчитать, но это зашквар какой-то:
'(((SUM(xlVote.value = 1) + 1.9208) / (SUM(xlVote.value = 1) + SUM(xlVote.value = -1)) - 1.96 * sqrt((SUM(xlVote.value = 1) * SUM(xlVote.value = -1)) / (SUM(xlVote.value = 1) + SUM(xlVote.value = -1)) + 0.9604) / (SUM(xlVote.value = 1) + SUM(xlVote.value = -1))) / (1 + 3.8416 / (SUM(xlVote.value = 1) + SUM(xlVote.value = -1))) * 100) as rating'
Количество голосов можно из tv поля, или джоином, голоса ведь в бд хранятся? Если правильно проставить js-* классы и data атрибуты должно работать, не понятно только что в propkey попадает, пока не могу «пощупать».