Commit e163dcfe authored by Vadim's avatar Vadim

Version 2.5.5

1. Исправлен баг с внутренним кешированием 2. Добавлено опционно "чел." в виджет онлайн посетителей
parent c3ee8e82
......@@ -26,12 +26,13 @@
Вставляет на страницу HTML-разметку:
```html
<span class="bg-az-counter" data-project="main" data-type="post" data-ID="1234">
<span class="bg-az-counter" data-type="main" data-type="post" data-ID="1234">
<span class="bg-az-counter-views"></span>
<span class="bg-az-counter-now"></span>
<span class="bg-az-counter-score"></span>
</span>
```
Задавайте функцию `bg_az_counter_views` в шаблоне страниц так:
```php
......@@ -146,110 +147,3 @@
**Внимание!** После удаления плагина файлы `wp-content/uploads/bg_az_counter.json` и `wp-content/uploads/bg_az_rating.json` **НЕ будут удалены**! При необходимости, удалите их вручную.
# Установка файлов плагина на не-WP проекты
_Внимание!_ На странице должен быть подключен jQuery!!!
### 1. Добавить в `<head>...</head>` страницы следующие строки: ###
```html
<!-- Bg Az-Counter head START --->
<link rel='stylesheet' id='bg_counter_styles-css' href='https://azbyka.ru/wp-content/plugins/bg-az-counter/css/styles.css' type='text/css' media='all' />
<script>
var path = window.location.pathname;
if (path[path.length-1] == "/") path = path.slice(0, -1); // Удаляем последний слэш, если он есть
var filename = path.split("/").pop();
var bg_counter = {
"counterurl":"https:\/\/stat.azbyka.ru\/counters", // Всегда 'https://stat.azbyka.ru/counters'
"rateurl":"https:\/\/stat.azbyka.ru\/rate", // Всегда 'https://stat.azbyka.ru/rate'
"scoreurl":"https:\/\/stat.azbyka.ru\/item-score", // Всегда 'https://stat.azbyka.ru/item-score'
"websocket":"wss:\/\/stat.azbyka.ru\/realtime-view", // Всегда 'wss://stat.azbyka.ru/realtime-view'
"updatesocket":"wss:\/\/stat.azbyka.ru\/updates", // Всегда 'wss://stat.azbyka.ru/updates'
"updatetime":"3000", // Время обновление счетчиков онлайн-посетителей
"project":"\/project\/shemy", // Имя текущего проекта, например, '/shemy'
"type":"post", // Тип объекта 'post', 'category', 'tag', 'index' или пусто
"ID":filename, // ID объекта
"votes5":"голосов",
"votes2":"голоcа",
"vote1":"голос",
"voted":"Вы уже проголосовали",
"price":["тяжко", "слабо", "сносно", "достойно", "чудесно"],
"debug":""}; // Выводить или нет инфу в консоль
jQuery('div.count_views').ready(function() {
jQuery('span.bg-az-counter').attr('data-type',bg_counter.type );
jQuery('span.bg-az-counter').attr('data-ID',bg_counter.ID );
});
jQuery('div.bg_counter_rating').ready(function() {
jQuery('meta[itemprop=itemReviewed]').attr("content", document.title);
});
</script>
<script type="text/javascript" src="https://azbyka.ru/wp-content/plugins/bg-az-counter/js/reconnecting-websocket.min.js"></script>
<script type="text/javascript" src="https://azbyka.ru/wp-content/plugins/bg-az-counter/js/counter.js"></script>
<script type="text/javascript" src="https://azbyka.ru/wp-content/plugins/bg-az-counter/js/rating.js"></script>
<!-- Bg Az-Counter head END --->
```
В зависимости от проекта и типа данных на странице потребуется изменить в объекте `bg_counter` 3 элемента: `project`, `type` и `ID`. См. выше замечания по поводу значений этих параметров.
### 2. В теле страницы, в том месте, где это необходимо, установить блок для вывода на экран значений счетчиков ###
```html
<!-- Bg Az-Counter views START --->
<div class="count_views">
<span class="bg-az-counter" data-project="shemy" data-type="" data-ID="">
<i title="Всего просмотров" class="fa fa-eye"></i> <span class="bg-az-counter-views"></span>
<i title="Сейчас читают" class="fa fa-user-o"></i> <span class="bg-az-counter-now"></span>
<i title="Оценка пользователей" class="fa fa-star-o"></i> <span class="bg-az-counter-score"></span>
</span>
</div>
<!-- Bg Az-Counter views END --->
```
Чтобы пиктограмы были видны, шрифт `css/font-awesome.min.css` должен быть доступен.
Если какой-то из параметров не нужен, его достаточно просто удалить.
`data-project, data-type, data-ID` - необходимо указать значения, соответствующие тому, что должно быть отображено в форме вывода. См. выше замечания по поводу значений этих параметров.
### 3. В теле страницы, в том месте, где это необходимо, установить блок для ввода/вывода рейтинга страницы ###
```html
<!-- Bg Az-Counter rating START --->
<div class="bg_counter_rating">
<div><ul id="bg_counter_rate_box">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<span itemscope="" itemtype="http://schema.org/AggregateRating">
<meta itemprop="bestRating" content="5" />
<meta itemprop="worstRating" content="1" />
<meta itemprop="author" content="Азбука веры" />
<meta itemprop="itemReviewed" content="" />
<meta content="" itemprop="ratingValue">
<meta content="" itemprop="ratingCount">
(<span id="bg_counter_votes"></span>&nbsp;<span id="bg_counter_votes_txt"></span>:&nbsp;<span id="bg_counter_score" data-voted="">{$score}</span>&nbsp;из&nbsp;<span id="bg_counter_rating_max">5</span>)
</span></div>
<div id="bg_counter_popup_help"></div>
</div>
<!-- Bg Az-Counter rating END --->
```
Следует иметь ввиду, что содержимое мета-полей itemReviewed, ratingValue и ratingCount заполняется только на этапе отображения страницы на стороне клиента.
Некоторые поисковые боты не запускают JS при анализе страниц и, следовательно, не будут видеть эти значения.
Чтобы избежать потери данных этими ботами необходимо предусматреть заполнение этих полей при формировании страницы на сервере средствами CMS, на которой работает сайт.
Для этого необходимо организовать HTTP GET запрос к серверу статистики https://stat.azbyka.ru/item-score/project/<имя_проекта>/type/id . В ответ вы получите JSON в виде:
```json
{
"success": true,
"data": {
"alreadyVoted":true,
"score": 3.7142857142857144,
"votes": 7
}
}
```
itemReviewed - это, как правило, title страницы - заполняется любым удобным способом.
......@@ -3,7 +3,7 @@
Plugin Name: Bg Az-Counter
Plugin URI: https://bogaiskov.ru
Description: Подсчет количества посещений страниц на базе stat.azbyka.ru
Version: 2.5.4
Version: 2.5.5
Author: VBog
Author URI: https://bogaiskov.ru
License: GPL2
......@@ -38,7 +38,7 @@
if ( !defined('ABSPATH') ) {
die( 'Sorry, you are not allowed to access this page directly.' );
}
define('BG_COUNTER_VERSION', '2.5.4');
define('BG_COUNTER_VERSION', '2.5.5');
define('BG_COUNTER_LOG', dirname(__FILE__ ).'/bg_counter.log');
define('BG_COUNTER_STAT_COUNTERS','https://stat.azbyka.ru/counters');
......
......@@ -51,7 +51,7 @@ function getPopularPosts ($limit, $offset=0, $number=false) {
$response = json_decode($json, false);
if ($response->success == true){
$the_key='getPopularPosts_key';
$the_key='getPopularPosts_key_'.$limit.'_'.$offset.'_'.$number;
if(false===($quote=get_transient($the_key))) {
if ($number) $quote = '<ol class="bg-az-top-posts">'. PHP_EOL;
else $quote = '<ul class="bg-az-top-posts">'. PHP_EOL;
......
......@@ -88,6 +88,7 @@ class bg_counter_OnlineNowWidget extends WP_Widget {
public function widget( $args, $instance ) {
$title = apply_filters( 'widget_title', $instance['title'] ); // к заголовку применяем фильтр (необязательно)
$subtitle1 = $instance['subtitle1'];
$unit1 = $instance['unit1'];
$subtitle2 = $instance['subtitle2'];
$subtitle3 = $instance['subtitle3'];
......@@ -100,7 +101,7 @@ class bg_counter_OnlineNowWidget extends WP_Widget {
<div class="widget-item">
<div class="widget-inner">
<span class="bg-az-counter">
<p><?php echo $subtitle1; ?>: <span class="bg-az-counter-now"></span></p>
<p><?php echo $subtitle1; ?>: <span class="bg-az-counter-now"></span> <?php echo $unit1; ?></p>
<p><?php echo $subtitle2; ?>: <span class="bg-az-counter-views"></span></p>
<p><?php echo $subtitle3; ?>: <span class="bg-az-counter-posts"><?php echo wp_count_posts()->publish; ?></span></p>
......@@ -124,6 +125,7 @@ class bg_counter_OnlineNowWidget extends WP_Widget {
<p>
<label for="<?php echo $this->get_field_id( 'subtitle1' ); ?>">Сейчас на сайте:</label>
<input id="<?php echo $this->get_field_id( 'subtitle1' ); ?>" name="<?php echo $this->get_field_name( 'subtitle1' ); ?>" type="text" value="<?php echo ($subtitle1) ? esc_attr( $subtitle1 ) : 'Сейчас на сайте'; ?>" />
<input id="<?php echo $this->get_field_id( 'unit1' ); ?>" name="<?php echo $this->get_field_name( 'unit1' ); ?>" type="text" value="<?php echo ($unit1) ? esc_attr( $unit1 ) : 'чел.'; ?>" size="10" />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'subtitle2' ); ?>">Всего просмотров:</label>
......@@ -141,6 +143,7 @@ class bg_counter_OnlineNowWidget extends WP_Widget {
$instance = array();
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
$instance['subtitle1'] = ( ! empty( $new_instance['subtitle1'] ) ) ? strip_tags( $new_instance['subtitle1'] ) : 'Сейчас на сайте';
$instance['unit1'] = ( ! empty( $new_instance['unit1'] ) ) ? strip_tags( $new_instance['unit1'] ) : 'чел.';
$instance['subtitle2'] = ( ! empty( $new_instance['subtitle2'] ) ) ? strip_tags( $new_instance['subtitle2'] ) : 'Всего просмотров';
$instance['subtitle3'] = ( ! empty( $new_instance['subtitle3'] ) ) ? strip_tags( $new_instance['subtitle3'] ) : 'Всего записей';
return $instance;
......
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