Почему присвоение значения TV работает через раз?

Есть плагин, который срабатывает во время события 'OnWebPagePrerender', внутри плагина я выполняю ряд действий и сохраняю значение TV ресурса вот таким образом:

$tvcid = $modx->getObject('modTemplateVar',array('name' => 'views'));
$tvcid->setValue($modx->resource->get("id"), $views);
$tvcid->save();
$modx->cacheManager->clearCache();


Также пробовал вот таким:
$modx->resource->setTVValue('views', $views);
$modx->resource->save();


И в первом и другом случае код отрабатывает некорректно, изменение значения происходит через раз, а то и реже, непонятно с чем это связано. Эта часть кода 100% вызывается, я проверял.

Код для рассчета переменной views:
$views = $modx->resource->getTVValue("views");
$views = empty($views) ? 1 : ((int)$views + 1);


В чем может быть проблема и как это исправить?
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
volfing
@volfing Автор вопроса
По итогу проблема была в кеше самого ресурса. Несмотря на то, что плагин каждый раз выполнялся корректно, независимо от кеша, сам ресурс был кешируемым и по итогу отдавал неактуальные данные. В моем случае отключать кеш ресурсов совсем нецелесообразно, решил проблему, создав новую таблицу в БД.

$views = $modx->query("SELECT * FROM `news_views` WHERE `news_id`='{$modx->resource->get('id')}'");
        
$views = $views->fetch(PDO::FETCH_ASSOC);
        
if(empty($views)){
    $modx->query("INSERT INTO `news_views`(`news_id`, `count`) VALUES({$modx->resource->get('id')}, 1)");
}else{
    $views = $views["count"] + 1;
    $modx->query("UPDATE `news_views` SET count=count+1 WHERE news_id={$modx->resource->get('id')}");
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
Проблема в том что страница отдается из кэша скорее всего, а код не выполняется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы