Простой счетчик посещений страницы не работает

Добрый день!
Сделал сниппет, который вызываю в шаблоне страницы некэшированным — [[!count_views]]. Он должен увеличивать TV views (тип ввода — число) при каждом срабатывании. Но по факту он срабатывает только один раз. И также срабатывает один раз, если очищаю кэш либо пересохраняю сниппет. Настройки кэширования не менялись. MODX 2.8.3.
Как заставить его работать корректно?

<?php
$page = $modx->getObject('modResource', $modx->resource->get('id'));
$views = $page->getTVValue('views');
if ($views == '' || $views == 0) {
	$page->setTVValue('views', 1);
} else {
	$page->setTVValue('views', ++$views);
}
Владимир
31 марта 2022, 22:47
modx.pro
561
0

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

Артур Шевченко
01 апреля 2022, 00:35
+1
В конце же есть строчка
$page->save();
просто ты забыл её скопировать, да?
    Владимир
    01 апреля 2022, 01:00
    0
    Нет, в источнике такого не было: https://webstool.ru/schetchik-poseshhenij-modx-s-dalnejshej-sortirovkoj.html. Но спасибо, попробую!
      Артур Шевченко
      01 апреля 2022, 01:17
      0
      Не знаю, что задумывал автор, но почему бы вам просто не установить HitsPage или, если очень хочется заняться рукоделием, воспользуйтесь этой инструкцией.
        Владимир
        01 апреля 2022, 01:30
        0
        HitsPage я пробовал устанавливать, но не нашел нормальной документации. Теперь вижу, что нужно было специальный TV создать. Надо будет снова попробовать, спасибо. А то, что по инструкции — видел, оно под Tickets заточено и переделывать под свои нужды будет труднее.
      Владимир
      01 апреля 2022, 01:03
      0
      Нет, не помогает, к сожалению.
        Николай Савин
        01 апреля 2022, 18:36
        +1
        Метод setTVValue не нуждается в save, так как происходит работа не с ресурсом, а с отдельным объектом. Там в коде метода есть сохранение.
          Владимир
          02 апреля 2022, 09:59
          0
          Так или иначе оно в таком виде почему-то не работало
        vectorserver
        01 апреля 2022, 08:07
        +1
        Держи: github.com/vectorserver/modx_hitsViews/raw/main/hitsviews-1.0-beta1.transport.zip
        Код плагина:
        <?php
        /* @global $modx */
        $eventName = $modx->event->name;
        
        if ($eventName == 'OnLoadWebDocument') {
        
            $tvName = 'hitsViews';
            $tvCaption = 'Счетчик визитов hitsViews';
            $create = 0;
        
        
            $tv = $modx->resource->getTVValue($tvName);
        
            //Создает tv в первый раз из под админа
            if ($tv===NULL) {
                $collection_templates = $modx->getCollection('modTemplate');
        
                $templates = array();
                foreach ($collection_templates as $template) {
                    $templates[] = array('access' => true, 'id' => $template->id);
        
                }
        
                //Создаем TV
                $response = $modx->runProcessor('element/tv/create', array(
                    'name' => $tvName,
                    'caption' => $tvCaption,
                    'category' => 0,
                    'type' => 'number',
                    'default_text' => 0,
                    'templates' => $templates,
                ));
        
        
                $tv = "0";
            }
        
            $tvVal = (int) $tv;
            //savecount
            $modx->resource->setTVValue($tvName, $tvVal+=1);
            $modx->resource->save();
        }
          vectorserver
          01 апреля 2022, 08:36
          0
          Создастся TV именем hitsViews
            Владимир
            01 апреля 2022, 11:24
            0
            Спасибо! Пока что решил задачу при помощи HitsPage :)
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          10