Простой счетчик посещений страницы не работает
Добрый день!
Сделал сниппет, который вызываю в шаблоне страницы некэшированным — [[!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 :)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.