Добавляем счетчик посещений для разделов страниц
Популярные запросы: Open Graph, плагин Reading Time, тема Quebec, плагин Telegram, набор иконок Analogue
- 142 просмотра +2
- 15 ноября, 2025
- Обновлено: 15 ноября, 2025
- admin
- Время чтения: 5 минут
- 1 (Подробно)
Сразу оговоримся: счетчик посещений CMS Cotonti Siena (равно как и любой другой системы управления контентом сайта) – вещь не особенно точная и совершенно не информативная. Тем не менее, в качестве относительного источника референсной статистики она работает, и работает неплохо.
Если брать измерения за единый период, мы легко увидим, какой филиал или карточка товара посещается чаще других. При этом можно не только анализировать, но и использовать эти данные. Например, сформировать виджет популярных товаров или продвигать менее посещаемые страницы филиалов.
Однако, не страницами едиными жив сайт. Разделы с точки зрения поисковой оптимизации и продвижения гораздо более важны. Мы говорим здесь и о каталогах интернет-магазина и о тематических разделах блога, которые важнее отдельных карточек товаров или постов. Так что собирать статистику их посещений все же стоит.
Как Cotonti Siena считает посещения
Сбор статистики движок начинает с установки плагина Hits. Без него посещения фиксироваться не будут, и в этом есть своя логика: кому-то это надо, а кто-то установит более привычные Google Analytics и Яндекс Метрику и не будет использовать явно избыточный встроенный функционал.
При установке плагин Hits отрабатывает следующие SQL-запросы:
CREATE TABLE IF NOT EXISTS `cot_stats` (
`stat_name` varchar(32) NOT NULL,
`stat_value` int UNSIGNED NOT NULL default 0,
PRIMARY KEY (`stat_name`)
);
INSERT IGNORE INTO `cot_stats` (`stat_name`, `stat_value`) VALUES
('totalpages', 0),
('maxusers', 0),
('totalmailsent', 0),
('totalmailpmnot', 0),
('totalpms', 0),
('totalantihammer', 0);
Как видим, создается таблица cot_stats с предельно простой структурой, в которой каждая запись с уникальным полем stat_name представляет собой элемент статистики. Например, по умолчанию в таблице создается запись totalpages, в которой хранится общее количество посещений страниц сайта или totalpms с общим количеством отправленных личных сообщений.
Вместе с этим, плагин Hits предоставляет разработчику набор простых функций для работы со статистикой:
cot_stat_create()cot_stat_get()cot_stat_inc()cot_stat_update()cot_stat_set()
Функция cot_stat_set() является «оболочкой» для cot_stat_update() с явно указанным параметра $createIfNotExists.
Однако есть еще один подход – использование специально выделенного для статистики посещений экстраполя. Модуль Page работает именно так:
Cot::$db->query( 'UPDATE ' . Cot::$db->pages . ' SET page_count = page_count + 1 WHERE page_id = ?', $id );
Как видим, оба подхода вполне просты и реализуемы для любых других элементов контента. Варинт с API плагина Hits прост и не требует использования экстраполя, поскольку записи в таблице cot_stats создаются автоматически. Вариант с экстраполем, использованный в модуле Page, чуть более сложен, поскольку учитывает статический кэш для страниц.
Считаем посещения разделов Cotonti
Прежде всего, попробуем проанализировать, какой из подходов оптимальнее: таблица cot_stats или экстраполе structure_hits.
При записи статистики в таблицу cot_stats имеем следующие плюсы и минусы:
- нет необходимости в предварительном создании экстраполя,
- в движке присутствуют готовые функции для подсчета посещений,
- удалять статистику придется вручную.
Если используем второй вариант:
- экстраполе создается однократно и работает для всех разделов,
- необходимый код все равно умещается в одну строку,
- статистика легко корректируется, сбрасывается и удаляется.
Как видим, подходы совершенно равнозначны, так что по очереди реализуем оба. Для реализации нашей задачи будем использовать часть отдельного или проектного плагина с любым хуком из серии page.list, например
Hooks=page.list.tags
Начнем с варианта, использующего API плагина Hits.
Первая задача – зафиксировать переход. Мы будем использовать логику и настройки модуля Page, т. е. проверим, является ли пользователь администратором и необходимо ли считать посещения администраторов:
if (!Cot::$usr['isadmin'] || Cot::$cfg['page']['count_admin']) {
// place code here
}
применим функцию инкремента значения счетчика посещений и сформируем TPL-тег для вывода количества посещений. Чтобы все было красиво, используем функцию cot_declension() для вербального вывода:
(!Cot::$usr['isadmin'] || Cot::$cfg['page']['count_admin']) && cot_stat_inc($c, 1, true); $t->assign([ 'LIST_HITS' => cot_declension(cot_stat_get($c), $Ls['hits']), ]);
Если тег не нужен, в шаблоне просто укажем:
{PHP.c|cot_stat_get($this)|cot_declension($this, 'hits')}
Естественно, необходимо определить соответствующую lang-строку:
$Ls['hits'] = 'просмотр,просмотра,просмотров';
Если хотите использовать экстраполе, реализация будет схожей. Но вначале, чтобы не делать программную проверку, создадим эстраполе structure_hits через админку. Теперь все просто:
if (!Cot::$usr['isadmin'] || Cot::$cfg['page']['count_admin']) {
Cot::$db->query("UPDATE $db_structure SET structure_hits = structure_hits + 1 WHERE structure_code = ?", $c);
}
Для вывода статистики используем стандартный тег для экстраполя:
{LIST_CAT_HITS|cot_declension($this, 'hits')}
Заключение
Как видим, реализация подсчета посещений разделов фактически умещается в одну строку кода. О точности измерений спорить не будем: они гарантировано полезны только в относительном плане и дают представление о том, какие разделы являются более осещаемыми по отношению к другим. Впрочем, ничто не мешает вам усложнить алгоритм и сделать собираемую статистику более точной.
В предыдущем посте мы выясняли алгоритм удаления страниц из индекса поисковых систем.
Новый комментарий
Ошибка
Выполнено