Простой счетчик посещений страницы не работает
        Добрый день!
Сделал сниппет, который вызываю в шаблоне страницы некэшированным — [[!count_views]]. Он должен увеличивать TV views (тип ввода — число) при каждом срабатывании. Но по факту он срабатывает только один раз. И также срабатывает один раз, если очищаю кэш либо пересохраняю сниппет. Настройки кэширования не менялись. MODX 2.8.3.
Как заставить его работать корректно?
    
    
                                                                                
            Сделал сниппет, который вызываю в шаблоне страницы некэшированным — [[!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);
}    Комментарии: 10
                В конце же есть строчка
                    $page->save();просто ты забыл её скопировать, да?            
                Нет, в источнике такого не было: https://webstool.ru/schetchik-poseshhenij-modx-s-dalnejshej-sortirovkoj.html. Но спасибо, попробую!            
                    
                Не знаю, что задумывал автор, но почему бы вам просто не установить HitsPage или, если очень хочется заняться рукоделием, воспользуйтесь этой инструкцией.            
                    
                HitsPage я пробовал устанавливать, но не нашел нормальной документации. Теперь вижу, что нужно было специальный TV создать. Надо будет снова попробовать, спасибо. А то, что по инструкции — видел, оно под Tickets заточено и переделывать под свои нужды будет труднее.            
                    
                Нет, не помогает, к сожалению.            
                    
                Метод setTVValue не нуждается в save, так как происходит работа не с ресурсом, а с отдельным объектом. Там в коде метода есть сохранение.            
                    
                Так или иначе оно в таком виде почему-то не работало            
                    
                Держи: 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();
}            
                Создастся TV именем hitsViews            
                    
                Спасибо! Пока что решил задачу при помощи HitsPage :)            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.