Добро пожаловать на сайт SEDBY

Добавляем счетчик посещений для разделов страниц

  • 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')}

Заключение

Как видим, реализация подсчета посещений разделов фактически умещается в одну строку кода. О точности измерений спорить не будем: они гарантировано полезны только в относительном плане и дают представление о том, какие разделы являются более осещаемыми по отношению к другим. Впрочем, ничто не мешает вам усложнить алгоритм и сделать собираемую статистику более точной.

В предыдущем посте мы выясняли алгоритм удаления страниц из индекса поисковых систем.


Комментарии:
Комментарии отсутствуют

Новый комментарий

Ваш комментарий будет доступен для редактирования 10 минут
Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость