Счетчик просмотров на виджете

InstantCMS 2.X
#1 17 апреля 2026 в 18:10

Подскажите как реализовать счетчик просмотров или показа, виджета.

#2 18 апреля 2026 в 18:31

На стороне сервера

Создайте в таблице, в которой хранится содежримое виджетов, еще один столбец, скажем, views, со значение по умолчанию 0.

Затем, в момент загрузки виджета плюсуйте туда 1. Есть метод встроенный в модель increment. Это можно сделать через один из хуков. Или в момент получения виджетов, или в момент рендера шаблона виджетов. Там много хуков, посмотрите в отладке.

Затем в шаблоне сможете получить эти данные через $widget

Но это полбеды. Далее вы захотите опцию для включения, выключения подсчета. Потом, если виджетов будет много, захотите делать не отдельные инкременты, а один для всех. Опцию к виджетам добавить легко, вот тут добавлял опции в виджет instantcms.ru/forum/kak-dobavit-tekstovoe-pole-s-redaktorom-dlja-opisanija-v-vidzhet.html#post-364923

Для общего инкремента нужно тоже подыскать хук, где доступен список виджетов страницы. Получить  ids виджетов с включенной опцией, и увеличить их счетчик просмотров.

Если виджет один, и важен именно показ пользователю

Тут без js не обойтись. С помощью Observer отследить появление блока в поле зренения пользователя и сделать запрос к экшну своего компонента, передав туда id виджета. И уже в этом экшне плюсануть просмотр.

Если не хотите вносить правки в системные таблицы, создайте свою таблицу для хранения просмотров, и ведите статистику в ней. Но тогда просмотры придется joinить в процессе получения виджетов из базы.

#3 18 апреля 2026 в 22:18

Подскажите как реализовать счетчик просмотров или показа, виджета.

Юрий

А как вообще вы свой виджет показываете? Может стоит с этого начать?

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.

Похожее в блогах

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.