Плагин **Bg Az-Counter** обеспечивает работу клиентской части системы подсчета количества посещений страниц на базе Redis-based сервера `https://stat.azbyka.ru`.
Код и описание работы сервера [см. здесь](https://gitlab.eterfund.ru/azbyka/stats-server).
## Плагин выполняет следующие функции:
### Передает на сервер информацию об открытии страницы пользователем
### Запрашивает сервер и отображает на странице количество пользователей, просматривающих в данный момент страницу и общее количество просмотров страницы.
Для этого на странице должны быть размещена следующая HTML-разметка:
****data-type*** - тип записи (пока поддерживается только *post*, но при желании можно сделать *category*, *mark* и что-нибудь еще),
****data-ID*** - ID записи (объекта).
Для вставки HTML-кода на страницу используйте шорт-код `[bg_counter type='post' id='1234' now='true']` или php-функцию `bg_az_counter_views ($type, $id, $now);` в шаблоне записи (поста).
Параметры ***type*** и ***ID*** описаны выше, если задан параметр ***now*** с значением ***true*** (или любое значение кроме null, false, 0, ""), то будут отображаться количество пользователей, просматривающих в данный момент страницу и общее количество просмотров страницы.
Если параметрам ***type*** и/или ***ID*** заданы пустые значения, то будет выведено общее количество просмотров и онлайн-посетителей на сайте.
В случае ***now=false*** (или 0, "") - только общее количество просмотров страницы.
Если этот параметр не задан (или задан как ***now=null***), то используется значение, заданное в настройках плагина.
Задавайте функцию `bg_az_counter_views` в шаблоне страниц так:
Эти две основные функции плагина реализованы на JavaScript, работают только на стороне клиента в реальном времени и не зависят от наличия и способа кеширования страниц.
Параметры для JS-скрипта (в плагине задаются автоматически):
```html
<script>
varbg_counter={
"counterurl":"https://stat.azbyka.ru/counters",// Всегда
"websocket":"wss://stat.azbyka.ru/realtime-view",// Всегда
"project":"/project/propovedi",// Имя текущего проекта
"type":"post",// Пока только "post" или пусто для ID=""
"ID":"1234",// ID поста или пусто, чтобы не собирать статистику
"debug":""// Выводить или нет инфу в консоль
};
</script>
```
### Выводит на экран список популярных постов.
Для этого используйте шорт-код `[bg_counter_top_posts limit='10' number='true']` или php-функцию `getPopularPosts ($limit, $number);`, где ***limit ($limit)*** - количество постов в списке, ***number ($number) = true*** - нумерованный список, ***false*** - ненумерованный.
В настройках плагина можно задать периодичность обновления списка популярных постов: моментально, каждый час, ежедневно, еженедельно, ежемесячно, ежегодно.
Поскольку эта возможность реализована на серверной стороне WP необходимо согласовать это время с обновлением кеш страниц.
Для вывода списка популярных постов в боковую панель используйте **виджет "Популярные записи"**, который работает аналогично соответствующему шорт-коду.
**Виджет "Сейчас на сайте"**, выводит в боковую панель количество онлайн-посетителей на сайте и общее количество просмотров страниц.
## Импорт данных, архивирование и валидация данных
Плагин позволяет загрузить на сервер данные из плагинов **Post Views Counter** и/или **WP Popular Posts**, а также из произвольных полей **"views"**.
Кроме того плагин ежедневно сохраняет архив данных в файле `wp-content/uploads/bg_az_counter.json`, которые при необходимости можно также загрузить на сервер.
В случае возникновения проблем при сохранении архива ошибки фиксируются в логе плагина: `wp-content/plugins/bg-az-counter/bg_counter.log`.
Чтобы удалить лишние записи с сервера достаточно обнулить значения счетчика.
При ежедневном архивировании данных происходит их проверка на валидность.
Проверяется есть ли в БД WP запись с данным **ID**, имеет ли эта запись тип *'post'*, *'page'* или ползователский тип, а статус - *'publish'*.
Все некорректные записи обнуляются и будут удалены на сервере.
**Внимание!** После удаления плагина файл `wp-content/uploads/bg_az_counter.json`**НЕ будет удален**! При необходимости, удалите его вручную.
Плагин **Bg Az-Counter** обеспечивает работу клиентской части системы подсчета количества посещений страниц на базе Redis-based сервера `https://stat.azbyka.ru`.
Код и описание работы сервера [см. здесь](https://gitlab.eterfund.ru/azbyka/stats-server).
## Плагин выполняет следующие функции:
### 1. Передает на сервер информацию об открытии страницы пользователем
### 2. Запрашивает сервер и отображает на странице количество пользователей, просматривающих в данный момент страницу и общее количество просмотров страницы.
Для этого на странице должны быть размещена следующая HTML-разметка:
```html
<span class="bg-az-counter" data-type="post" data-ID="1234">
<span class="bg-az-counter-now"></span>
<span class="bg-az-counter-views"></span>
</span>
```
где
* ***data-type*** - тип записи (пока поддерживается только *post*, но при желании можно сделать *category*, *mark* и что-нибудь еще),
****data-ID*** - ID записи (объекта).
Для вставки HTML-кода на страницу используйте шорт-код `[bg_counter type='post' id='1234' now='true']` или php-функцию `bg_az_counter_views ($type, $id, $now);` в шаблоне записи (поста).
Параметры ***type*** и ***ID*** описаны выше, если задан параметр ***now*** с значением ***true*** (или любое значение кроме null, false, 0, ""), то будут отображаться количество пользователей, просматривающих в данный момент страницу и общее количество просмотров страницы.
Если параметрам ***type*** и/или ***ID*** заданы пустые значения, то будет выведено общее количество просмотров и онлайн-посетителей на сайте.
В случае ***now=false*** (или 0, "") - только общее количество просмотров страницы.
Если этот параметр не задан (или задан как ***now=null***), то используется значение, заданное в настройках плагина.
Задавайте функцию `bg_az_counter_views` в шаблоне страниц так:
```php
<?php if (function_exists('bg_az_counter_views')) {echo bg_az_counter_views ('post', $post->ID);} ?>
```
### 3. Создает форму для оценки пользователем поста
Для вставки формы на страницу используйте шорт-код `[bg_az_rating type='post' id='1234']` или php-функцию `bg_az_counter_rating ($type, $id);` в шаблоне записи (поста).
Параметры ***type*** и ***ID*** те же, что и для счетчика просмотров страницы и описаны выше.
По умолчанию ***type = 'post'*** и/или ***ID = <ID текущего поста>***.
Задавайте функцию `bg_az_counter_views` в шаблоне страниц так:
```php
<?php if (function_exists('bg_az_counter_rating')) {echo bg_az_counter_rating ('post', $post->ID);} ?>
```
Форма также формирует снипеты для поисковых ботов:
```html
<span itemscope="" itemtype="http://schema.org/AggregateRating">
<meta itemprop="bestRating" content="5" />
<meta itemprop="worstRating" content="1" />
<meta itemprop="author" content="{$author}" />
<meta itemprop="itemReviewed" content="{$page_title}" />
<meta content="{$score}" itemprop="ratingValue">
<meta content="{$votes}" itemprop="ratingCount">
</span>
```
### 4. Параметры JS-скриптов
Описанные выше основные функции плагина реализованы на JavaScript, работают только на стороне клиента в реальном времени и не зависят от наличия и способа кеширования страниц.
Параметры для JS-скрипта (в плагине задаются автоматически):
```html
<script>
var bg_counter = {
"counterurl":"https://stat.azbyka.ru/counters", // Всегда
"rateurl":"https://stat.azbyka.ru/rate", // Всегда
"websocket":"wss://stat.azbyka.ru/realtime-view", // Всегда
"project":"/project/propovedi", // Имя текущего проекта
"type":"post", // Пока только "post" или пусто для ID=""
"ID":"1234", // ID поста или пусто, чтобы не собирать статистику
"votes5":"голосов",
"votes2":"голоcа",
"vote1":"голос",
"voted":"Вы уже проголосовали",
"price":["ужасно", "плохо", "удовлетворительно", "хорошо", "отлично"],
"debug":"" // Выводить или нет инфу в консоль
};
</script>
```
### 5. Выводит на экран список популярных постов и рейтинга записей
Для вывода списка популярных постов используйте шорт-код `[bg_counter_top_posts limit='10' number='true']` или php-функцию `getPopularPosts ($limit, $number);`, где ***limit ($limit)*** - количество постов в списке, ***number ($number) = true*** - нумерованный список, ***false*** - ненумерованный.
В настройках плагина можно задать периодичность обновления списка популярных постов: моментально, каждый час, ежедневно, еженедельно, ежемесячно, ежегодно.
Поскольку эта возможность реализована на серверной стороне WP необходимо согласовать это время с обновлением кеш страниц.
Формат вывода списка на экран:
```html
<ul class="bg-az-top-posts">
<li>
<a href="https://azbyka.ru/.../?p=186" title="...">...</a> - <span class="bg-az-count">...</span>
</li>
<li>
<a href="https://azbyka.ru/.../?p=263" title="...">...</a> - <span class="bg-az-count">...</span>
</li>
...
</ul>
```
Для вывода списка популярных постов используйте шорт-код `[bg_counter_post_rating limit='10' number='true']` или php-функцию `getPostRating ($limit, $number);`, где ***limit ($limit)*** - количество постов в списке, ***number ($number) = true*** - нумерованный список, ***false*** - ненумерованный.
Для отображения в боковой панели используйте виджеты **"Популярные записи"** и **"Рейтинг записей"**, который работает аналогично соответствующему шорт-коду.
**Виджет "Сейчас на сайте"**, выводит в боковую панель количество онлайн-посетителей на сайте и общее количество просмотров страниц.
## Импорт данных, архивирование и валидация данных
Плагин позволяет загрузить на сервер данные из плагинов **Post Views Counter** и/или **WP Popular Posts**, а также из произвольных полей **"views"**.
Данные рейтинга постов можно загрузить из плагина **Bg Az-Rating**.
Кроме того плагин ежедневно сохраняет архив данных в файлах `wp-content/uploads/bg_az_counter.json` и `wp-content/uploads/bg_az_rating.json`, которые при необходимости можно также загрузить на сервер.
В случае возникновения проблем при сохранении архива ошибки фиксируются в логе плагина: `wp-content/plugins/bg-az-counter/bg_counter.log`.
Чтобы удалить лишние записи с сервера достаточно обнулить значения счетчиков.
При ежедневном архивировании данных происходит их проверка на валидность.
Проверяется есть ли в БД WP запись с данным **ID**, имеет ли эта запись тип *'post'*, *'page'* или ползователский тип, а статус - *'publish'*.
Все некорректные записи обнуляются и будут удалены на сервере.
**Внимание!** После удаления плагина файлы `wp-content/uploads/bg_az_counter.json` и `wp-content/uploads/bg_az_rating.json` **НЕ будут удалены**! При необходимости, удалите их вручную.