Меня довольно часто спрашивают как вывести онлайн на форуме или на промо странице.
Брать за это деньги уже не позволяет совесть, поэтому специально для mmo-develop.ru набросал этот мануал.
В статье будет предложено несколько вариантов вывода:
как и в % от максимального онлайна ( что сейчас можно);
с накруткой ( как раньше ).
Для начала нам понадобится пхп скрипт, который и будет выводить или онлайн или %.
С него и начнем.
Выкладываю готовый код, ниже будет пояснения.
Дальше нужно вывести онлайн или % на сайте.
Рассмотрим оба варианта вывода.
1. вывести онлайн с накруткой.
- создать папку в корне . Название можно любое, главное его не забыть ) Для примера назовем online
- в папке разместить php скрипт ( код выше)
Опять же, название можно любое, главное его не забыть ) Для примера назовем online.php
- в папке создать файл для кеширования. название из скрипта
2. На сайте вставить код.
Для его работы нужна jquery библиотека, в 95 % она уже используется, но если нет то ее стоит подключить
Код для вставки в нужное место
Выше указываем имя папки и имя пхп скрипта.
В идеале, код между тегами <script> добавить в конец страницы, чтобы она быстрей загружалась, а лиш потом в нужное поле ставилось значение с онлайном.
Второй вариант - вывод в % мы рассмотрим сразу с использованием статус бара ( типо картинка заполнена на %)
1. первый пункт все тот же - создать папку, файлы....смотрите выше.
Но добавляется в папку style.css файл и две картинки.
Картинки:
- back.png - фоновая картинка.
- top.png - картинка, которая заполняет фон на необходимый %.
Пример картинок есть архиве ниже.
2. Опять же, если нужно библиотека jquery, до к коду добавиться.но она почти везде ( на форумах так точно ) используется.
код для вставки
Спасибо за внимание.
Если будут вопросы, ошибки всегда буду рад на них ответить ( при наличии времени).
P.S Я только учусь, мой код может быть корявым и не читаемым, но я учусь. Буду рад критики, и если объясните как правильно.
Кик, если будет не лень, поправь оформление как тебе нравится.
Брать за это деньги уже не позволяет совесть, поэтому специально для mmo-develop.ru набросал этот мануал.
В статье будет предложено несколько вариантов вывода:
как и в % от максимального онлайна ( что сейчас можно);
с накруткой ( как раньше ).
Для начала нам понадобится пхп скрипт, который и будет выводить или онлайн или %.
С него и начнем.
Выкладываю готовый код, ниже будет пояснения.
PHP:
<?php
/**
* Description of online
*
* @author Anton Faibyshev
* email: faibyshevao@gmail.com
* skype: zGrandy
* Специально для mmo-develop.ru
*/
error_reporting(0);
class online {
private $config;
private $delay;
private $filename;
private $maxonline;
private $online;
private $persent;
private $rate;
public function __construct() {
// Данные для соединения с базой сервера
$this->config['host'] = 'localhost';
$this->config['user'] = 'root';
$this->config['password'] = 'fv123';
$this->config['db'] = 'l2j';
//Настройки
$this->filename = 'cache.txt'; //имя файла, в который будет кешироваться онлайн. ВНИМАНИЕ !!! В нем будет хранится реальный онлайн
$this->delay = 1; // Время обновления онлайна из базы . например для обновления раз в 5 минут необходимо установить значение 300
$this->persent = false; //в выводить % от максимально онлайна, или же онлайн с накруткой. для % - true , для онлайна false
$this->maxonline = 10; // Максимальный онлайн, если выводить в %
$this->rate = 12; // Коєфициєнт накрутки онлайна, если выводится онлайн
}
public function get_online() {
$this->new_online();
if ($this->persent) {
$online = ($this->online / $this->maxonline) * 100;
return round($online);
} else {
$online = $this->online * $this->rate;
return round($online);
}
}
private function new_online() {
$last_update = time() - filemtime($this->filename);
if ($last_update > $this->delay) {
$this->online = $this->refresh_online();
$fp = fopen($this->filename, 'w');
fwrite($fp, $this->online);
fclose($fp);
return true;
} else {
$fp = fopen($this->filename, "r");
if ($fp) {
$this->online = fgets($fp, 999);
}
fclose($fp);
return true;
}
}
private function refresh_online() {
$conn = new mysqli($this->config['host'], $this->config['user'], $this->config['password'], $this->config['db']);
$query = "SELECT count(0) FROM `characters` WHERE `online`!=0";
$result = $conn->query($query);
if (!$result) {
return false;
}
$rows = $result->fetch_assoc();
$conn->close();
$result->free();
return $rows['count(0)'];
}
}
$online = new online;
echo $online->get_online();
В нем нас интересуют следующие строки:
// Данные для соединения с базой сервера
$this->config['host'] = 'localhost';
$this->config['user'] = 'root';
$this->config['password'] = 'fv123';
$this->config['db'] = 'l2j';
//Настройки
$this->filename = 'cache.txt'; //имя файла, в который будет кешироваться онлайн. ВНИМАНИЕ !!! В нем будет хранится реальный онлайн
$this->delay = 1; // Время обновления онлайна из базы . например для обновления раз в 5 минут необходимо установить значение 300
$this->persent = false; //в выводить % от максимально онлайна, или же онлайн с накруткой. для % - true , для онлайна false
$this->maxonline = 10; // Максимальный онлайн, если выводить в %
$this->rate = 12; // Коєфициєнт накрутки онлайна, если выводится онлайн
То что нужно изменить я выделил красным.
думаю с коннектом к бд все понятно)
1. изменить имя файла, для того.чтобы не могли узнать реальный онлайн.
например $this->filename = 'azazaonline.txt';
2. поставить приличный delay. например 300 или 600. Это очень снизит нагрузку на вашу бд. да и нету большого смысла обновлять так часто онлайн.
например $this->delay = 300;
обновление будет раз в 5 минут
3.1 если стоит $this->persent = true; то будет выводится % текущего онлайна от $this->maxonline
Например:
РЕАЛЬНЫЙ онлайн сервера = 6
$this->maxonline = 10;
Выводить будет - 60
3.2 если стоит $this->persent = false; то выводиться будет онлайн сервера умножением в $this->rate раз.
Например:
РЕАЛЬНЫЙ онлайн сервера = 6
$this->rate = 12;
Выводить будет - 72
// Данные для соединения с базой сервера
$this->config['host'] = 'localhost';
$this->config['user'] = 'root';
$this->config['password'] = 'fv123';
$this->config['db'] = 'l2j';
//Настройки
$this->filename = 'cache.txt'; //имя файла, в который будет кешироваться онлайн. ВНИМАНИЕ !!! В нем будет хранится реальный онлайн
$this->delay = 1; // Время обновления онлайна из базы . например для обновления раз в 5 минут необходимо установить значение 300
$this->persent = false; //в выводить % от максимально онлайна, или же онлайн с накруткой. для % - true , для онлайна false
$this->maxonline = 10; // Максимальный онлайн, если выводить в %
$this->rate = 12; // Коєфициєнт накрутки онлайна, если выводится онлайн
То что нужно изменить я выделил красным.
думаю с коннектом к бд все понятно)
1. изменить имя файла, для того.чтобы не могли узнать реальный онлайн.
например $this->filename = 'azazaonline.txt';
2. поставить приличный delay. например 300 или 600. Это очень снизит нагрузку на вашу бд. да и нету большого смысла обновлять так часто онлайн.
например $this->delay = 300;
обновление будет раз в 5 минут
3.1 если стоит $this->persent = true; то будет выводится % текущего онлайна от $this->maxonline
Например:
РЕАЛЬНЫЙ онлайн сервера = 6
$this->maxonline = 10;
Выводить будет - 60
3.2 если стоит $this->persent = false; то выводиться будет онлайн сервера умножением в $this->rate раз.
Например:
РЕАЛЬНЫЙ онлайн сервера = 6
$this->rate = 12;
Выводить будет - 72
Дальше нужно вывести онлайн или % на сайте.
Рассмотрим оба варианта вывода.
1. вывести онлайн с накруткой.
- создать папку в корне . Название можно любое, главное его не забыть ) Для примера назовем online
- в папке разместить php скрипт ( код выше)
Опять же, название можно любое, главное его не забыть ) Для примера назовем online.php
- в папке создать файл для кеширования. название из скрипта
2. На сайте вставить код.
Для его работы нужна jquery библиотека, в 95 % она уже используется, но если нет то ее стоит подключить
HTML:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
HTML:
<div id="onlinebar-text" ></div>
<script>
$(document).ready(function(){
$.get("online/online.php", function(data) {
$("#onlinebar-text").text(data);
});
});
</script>
В идеале, код между тегами <script> добавить в конец страницы, чтобы она быстрей загружалась, а лиш потом в нужное поле ставилось значение с онлайном.
Второй вариант - вывод в % мы рассмотрим сразу с использованием статус бара ( типо картинка заполнена на %)
1. первый пункт все тот же - создать папку, файлы....смотрите выше.
Но добавляется в папку style.css файл и две картинки.
HTML:
.serv-im {
background: url(back.png);
width: 151px;
height: 30px;
}
.serv-im .serv-scale {
background: url(top.png);
width: 0%;
height: 21px;
-webkit-transition: all 1s ease;
-moz-transition: all 1s ease;
-o-transition: all 1s ease;
transition: all 1s ease;
}
- back.png - фоновая картинка.
- top.png - картинка, которая заполняет фон на необходимый %.
Пример картинок есть архиве ниже.
2. Опять же, если нужно библиотека jquery, до к коду добавиться.но она почти везде ( на форумах так точно ) используется.
код для вставки
HTML:
<link href="online/style.css" rel="stylesheet" type="text/css" />
<div class="serv-im">
<div id="onlinebar" class="serv-scale" style="width: 0%;"></div>
</div>
<script>
$(document).ready(function(){
$.get("online/online.php", function(data) {
$("#onlinebar").css('width',data);
});
});
</script>
Спасибо за внимание.
Если будут вопросы, ошибки всегда буду рад на них ответить ( при наличии времени).
P.S Я только учусь, мой код может быть корявым и не читаемым, но я учусь. Буду рад критики, и если объясните как правильно.
Кик, если будет не лень, поправь оформление как тебе нравится.