Подскажите как реализовать счетчик просмотров или показа, виджета.
На стороне сервера
Создайте в таблице, в которой хранится содежримое виджетов, еще один столбец, скажем, 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ить в процессе получения виджетов из базы.
Подскажите как реализовать счетчик просмотров или показа, виджета.
А как вообще вы свой виджет показываете? Может стоит с этого начать?