Commit d6cfc0b9 authored by Vadim's avatar Vadim

Version 2.2.1

1. Опция Оценки пользователей 2. Readme
parent bd9c416c
Плагин **Bg Az-Counter** обеспечивает работу клиентской части системы подсчета количества посещений страниц на базе Redis-based сервера `https://stat.azbyka.ru`.
Код и описание работы сервера [см. здесь](https://gitlab.eterfund.ru/azbyka/stats-server).
## Плагин выполняет следующие функции:
### 1. Передает на сервер информацию об открытии страницы пользователем
### 2. Запрашивает сервер и отображает на странице количество пользователей, просматривающих в данный момент страницу и общее количество просмотров страницы.
Для вставки HTML-кода на страницу используйте шорт-код `[bg_counter type='post' id='1234' now='true']` или php-функцию `bg_az_counter_views ($type, $id, $now);` в шаблоне записи.
где
* ***type*** - тип записи (пока поддерживается только *post*, но при желании можно сделать *category*, *mark* и что-нибудь еще),
* ***ID*** - ID записи (объекта).
* ***now = true*** (или любое значение кроме null, false, 0, "") - отображать количество пользователей, просматривающих в данный момент страницу.
Если ***type*** и/или ***ID = <пусто>***, то будет выведено общее количество просмотров и онлайн-посетителей на сайте.
В случае ***now=false*** (или 0, "") - только общее количество просмотров страницы.
Задавайте функцию `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-скриптов
Параметры для 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*** - количество постов в списке,
* ***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);`, параметры те же.
Виджеты для боковой панели: **"Популярные записи"** и **"Рейтинг записей"**, который работает аналогично соответствующему шорт-коду.
Виджет **"Сейчас на сайте"**, выводит в боковую панель количество онлайн-посетителей на сайте и общее количество просмотров страниц.
Количество онлайн-посетителей обновляется каждые 5 секунд. Остальные показатели не изменяются.
## Импорт данных, архивирование и валидация данных
Плагин позволяет загрузить на сервер данные из плагинов **Post Views Counter**, **WP Popular Posts**, **Bg Az-Rating**, а также из произвольных полей **"views"**.
Плагин ежедневно сохраняет архив данных в файлах `wp-content/uploads/bg_az_counter.json` и `wp-content/uploads/bg_az_rating.json`, которые при необходимости можно также загрузить на сервер.
Ошибки фиксируются в логе плагина: `wp-content/plugins/bg-az-counter/bg_counter.log`.
Чтобы удалить лишние записи с сервера достаточно обнулить значения счетчиков.
Проверка на валидность при сохранении архива:
* имеет ли запись с данным **ID** тип *'post'*, *'page'* или *ползователский тип* и статус - *'publish'*.
Все некорректные записи обнуляются и будут удалены на сервере.
**Внимание!** После удаления плагина файлы `wp-content/uploads/bg_az_counter.json` и `wp-content/uploads/bg_az_rating.json` **НЕ будут удалены**! При необходимости, удалите их вручную.
Плагин **Bg Az-Counter** обеспечивает работу клиентской части системы подсчета количества посещений страниц на базе Redis-based сервера `https://stat.azbyka.ru`. Код и описание работы сервера [см. здесь](https://gitlab.eterfund.ru/azbyka/stats-server). ## Плагин выполняет следующие функции: ### 1. Передает на сервер информацию об открытии страницы пользователем ### 2. Запрашивает сервер и отображает на странице количество пользователей, просматривающих в данный момент страницу, общее количество просмотров страницы и оценку страницы пользователями. Для вставки HTML-кода на страницу используйте шорт-код `[bg_counter type='post' id='1234' now='true' rate='true']` или php-функцию `bg_az_counter_views ($type, $id, $now, $rate);` в шаблоне записи. где * ***type*** - тип записи (пока поддерживается только *post*, но при желании можно сделать *category*, *mark* и что-нибудь еще), * ***ID*** - ID записи (объекта). * ***now = true*** (или любое значение кроме null, false, 0, "") - отображать количество пользователей, просматривающих в данный момент страницу. * ***rate = true*** (или любое значение кроме null, false, 0, "") - отображать оценку пользователями данной записи. Если ***type = <пусто>*** и/или ***ID = <пусто>***, то будет выведено общее количество просмотров и онлайн-посетителей на сайте. Задавайте функцию `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> ``` * ***{$page_title}*** - если не указано в настройках, то по умолчанию название поста, * ***{$author}*** - если не указано в настройках, то по умолчанию имя автора в метаполе 'author' поста, если же и метаполе отсутствует, то название сайта ### 4. Параметры JS-скриптов Параметры для 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*** - количество постов в списке, * ***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);`, параметры те же. Виджеты для боковой панели: **"Популярные записи"** и **"Рейтинг записей"**, который работает аналогично соответствующему шорт-коду. Виджет **"Сейчас на сайте"**, выводит в боковую панель количество онлайн-посетителей на сайте и общее количество просмотров страниц. Количество онлайн-посетителей обновляется каждые 5 секунд. Остальные показатели не изменяются. ## Импорт данных, архивирование и валидация данных Плагин позволяет загрузить на сервер данные из плагинов **Post Views Counter**, **WP Popular Posts**, **Bg Az-Rating**, а также из произвольных полей **"views"**. Плагин ежедневно сохраняет архив данных в файлах `wp-content/uploads/bg_az_counter.json` и `wp-content/uploads/bg_az_rating.json`, которые при необходимости можно также загрузить на сервер. Ошибки фиксируются в логе плагина: `wp-content/plugins/bg-az-counter/bg_counter.log`. Чтобы удалить лишние записи с сервера достаточно обнулить значения счетчиков. Проверка на валидность при сохранении архива: * имеет ли запись с данным **ID** тип *'post'*, *'page'* или *ползователский тип* и статус - *'publish'*. Все некорректные записи обнуляются и будут удалены на сервере. **Внимание!** После удаления плагина файлы `wp-content/uploads/bg_az_counter.json` и `wp-content/uploads/bg_az_rating.json` **НЕ будут удалены**! При необходимости, удалите их вручную.
\ No newline at end of file
......
......@@ -3,7 +3,7 @@
Plugin Name: Bg Az-Counter
Plugin URI: https://bogaiskov.ru
Description: Подсчет количества посещений страниц на базе stat.azbyka.ru
Version: 2.2
Version: 2.2.1
Author: VBog
Author URI: https://bogaiskov.ru
License: GPL2
......@@ -37,7 +37,7 @@
if ( !defined('ABSPATH') ) {
die( 'Sorry, you are not allowed to access this page directly.' );
}
define('BG_COUNTER_VERSION', '2.2');
define('BG_COUNTER_VERSION', '2.2.1');
define('BG_COUNTER_LOG', dirname(__FILE__ ).'/bg_counter.log');
define('BG_COUNTER_STAT_COUNTERS','https://stat.azbyka.ru/counters');
......
......@@ -143,8 +143,9 @@ function setAllCounts ($request) {
Отображает разметку текста для отображения кол-ва просмотров
и кол-ва читающих пост пользователей
******************************************************************************************/
function bg_az_counter_views ($type=null, $id=null, $now=null) {
function bg_az_counter_views ($type=null, $id=null, $now=null, $rate=null) {
global $project;
$option = get_option('bg_counter_options');
if (is_single() || is_page()) {
if (is_null($id)) {
......@@ -156,9 +157,11 @@ function bg_az_counter_views ($type=null, $id=null, $now=null) {
}
}
if (is_null($now)) {
$option = get_option('bg_counter_options');
$now = $option['now'];
}
if (is_null($rate)) {
$rate = $option['rate'];
}
$link = get_permalink($id);
// Получить имя проекта по ссылке
if (wp_parse_url( $link, PHP_URL_HOST ) == 'azbyka.ru') {
......@@ -178,7 +181,7 @@ function bg_az_counter_views ($type=null, $id=null, $now=null) {
$views = '<i title="Просмотры страницы" class="fa fa-eye"></i> <span class="bg-az-counter-views"></span>';
$users = ' <i title="Сейчас читают страницу" class="fa fa-user-o"></i> <span class="bg-az-counter-now"></span>';
$score = ' <i title="Оценка пользователей" class="fa fa-star-o"></i> <span class="bg-az-counter-score"></span>';
$quote = '<span class="bg-az-counter" data-type="'.$type.'" data-ID="'.$id.'">'.$views.($now?$users:'').$score.'</span>';
$quote = '<span class="bg-az-counter" data-type="'.$type.'" data-ID="'.$id.'">'.$views.($now?$users:'').($rate?$score:'').'</span>';
return $quote;
} else return "";
}
......@@ -199,9 +202,10 @@ function bg_counter_shortcode( $atts ) {
extract( shortcode_atts( array(
'type' => null,
'id' => null,
'now' => null
'now' => null,
'rate' => null
), $atts ) );
$quote = bg_az_counter_views ($type, $id, $now);
$quote = bg_az_counter_views ($type, $id, $now, $rate);
return "{$quote}";
}
......
......@@ -4,7 +4,7 @@
*******************************************************************************************/
// Начальные значения
add_option('bg_counter_options', array('period'=>DAY_IN_SECONDS, 'now'=>0, 'title'=>'', 'author'=>'', 'debug'=>0, 'archive'=>0, 'pvc'=>0, 'wppp'=>0, 'wppm'=>0, 'bgar'=>0));
add_option('bg_counter_options', array('period'=>DAY_IN_SECONDS, 'now'=>0, 'rate'=>1, 'title'=>'', 'author'=>'', 'debug'=>0, 'archive'=>0, 'pvc'=>0, 'wppp'=>0, 'wppm'=>0, 'bgar'=>0));
add_option('bg_pvc_loaded', '');
add_option('bg_wppp_loaded', '');
add_option('bg_wppm_loaded', '');
......@@ -17,6 +17,9 @@ if (!isset($val['period'])) {
if (!isset($val['now'])) {
$val['now'] = 0;
}
if (!isset($val['rate'])) {
$val['rate'] = 1;
}
if (!isset($val['title'])) {
$val['title'] = "";
}
......@@ -148,6 +151,21 @@ function bg_counter_options_page_output(){
?>
</form>
</div>
<script>
// Блокируем изменение всх опций, кроме этой
function blockInputs(el) {
if (jQuery(el).prop ('checked')) {
jQuery('select').prop ('disabled', true);
jQuery('input:text').prop ('disabled', true);
jQuery('input:checkbox').prop ('disabled', true);
} else {
jQuery('select').prop ('disabled', false);
jQuery('input:text').prop ('disabled', false);
jQuery('input:checkbox').prop ('disabled', false);
}
jQuery(el).prop ('disabled', false);
}
</script>
<?php
}
}
......@@ -168,6 +186,7 @@ function bg_counter_settings(){
// параметры: $id, $title, $callback, $page, $section, $args
add_settings_field('bg_counter_period', 'Периодичность обработки данных', 'fill_bg_counter_period', 'bg_counter_page', 'section_1' );
add_settings_field('bg_counter_now', 'Просматривают сейчас', 'fill_bg_counter_now', 'bg_counter_page', 'section_1' );
add_settings_field('bg_counter_rate', 'Оценка пользователями', 'fill_bg_counter_rate', 'bg_counter_page', 'section_1' );
add_settings_field('bg_counter_title', 'Общее название в сниппете по умолчанию', 'fill_bg_counter_title', 'bg_counter_page', 'section_1' );
add_settings_field('bg_counter_author', 'Общее имя автора в сниппете по умолчанию', 'fill_bg_counter_author', 'bg_counter_page', 'section_1' );
add_settings_field('bg_counter_debug', 'Включить отладку', 'fill_bg_counter_debug', 'bg_counter_page', 'section_1' );
......@@ -205,6 +224,15 @@ function fill_bg_counter_now(){
<?php
}
## Заполняем опцию 2a
function fill_bg_counter_rate(){
$val = get_option('bg_counter_options');
$val = $val ? $val['rate'] : null;
?>
<label><input type="checkbox" name="bg_counter_options[rate]" value="1" <?php checked(1, $val ); ?>/> (отображать оценку пользователями данной записи)</label>
<?php
}
## Заполняем опцию 3
function fill_bg_counter_title(){
$val = get_option('bg_counter_options');
......@@ -239,7 +267,7 @@ function fill_bg_counter_sendArchive(){
// Всегда предлагать сохранить не отмеченный
?>
<label><input type="checkbox" name="bg_counter_options[archive]" value="1" /> отметьте и нажмите кнопку «Сохранить изменения» </label>
<label><input type="checkbox" name="bg_counter_options[archive]" value="1" onchange='blockInputs(this);' /> отметьте и нажмите кнопку «Сохранить изменения» </label>
<?php
}
## Заполняем опцию 7
......@@ -257,7 +285,7 @@ function fill_bg_counter_pvc(){
} else {
// Всегда предлагать сохранить не отмеченный
?>
<label><input type="checkbox" name="bg_counter_options[pvc]" value="1" /> отметьте и нажмите кнопку «Сохранить изменения» </label>
<label><input type="checkbox" name="bg_counter_options[pvc]" value="1" onchange='blockInputs(this);' /> отметьте и нажмите кнопку «Сохранить изменения» </label>
<?php
}
}
......@@ -277,7 +305,7 @@ function fill_bg_counter_wppp(){
} else {
// Всегда предлагать сохранить не отмеченный
?>
<label><input type="checkbox" name="bg_counter_options[wppp]" value="1" /> отметьте и нажмите кнопку «Сохранить изменения» </label>
<label><input type="checkbox" name="bg_counter_options[wppp]" value="1" onchange='blockInputs(this);' /> отметьте и нажмите кнопку «Сохранить изменения» </label>
<?php
}
}
......@@ -292,7 +320,7 @@ function fill_bg_counter_wppm(){
} else {
// Всегда предлагать сохранить не отмеченный
?>
<label><input type="checkbox" name="bg_counter_options[wppm]" value="1" /> отметьте и нажмите кнопку «Сохранить изменения» </label>
<label><input type="checkbox" name="bg_counter_options[wppm]" value="1" onchange='blockInputs(this);' /> отметьте и нажмите кнопку «Сохранить изменения» </label>
<?php
}
}
......@@ -307,7 +335,7 @@ function fill_bg_counter_bgar(){
} else {
// Всегда предлагать сохранить не отмеченный
?>
<label><input type="checkbox" name="bg_counter_options[bgar]" value="1" /> отметьте и нажмите кнопку «Сохранить изменения» </label>
<label><input type="checkbox" name="bg_counter_options[bgar]" value="1" onchange='blockInputs(this);' /> отметьте и нажмите кнопку «Сохранить изменения» </label>
<?php
}
}
......@@ -316,34 +344,10 @@ function fill_bg_counter_bgar(){
function bg_counter_sanitize_callback( $options ){
// очищаем
foreach( $options as $name => &$val ){
if( $name == 'period' )
$val = intval( $val );
if( $name == 'now' )
$val = intval( $val );
if( $name == 'title' )
$val = strip_tags( $val );
if( $name == 'author' )
if( $name == 'title' || $name == 'author')
$val = strip_tags( $val );
if( $name == 'debug' )
$val = intval( $val );
if( $name == 'archive' )
$val = intval( $val );
if( $name == 'pvc' )
$val = intval( $val );
if( $name == 'wppp' )
$val = intval( $val );
if( $name == 'wppm' )
$val = intval( $val );
if( $name == 'bgar' )
else
$val = intval( $val );
}
return $options;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment