• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.
Иконка ресурса

Мануал [WEB] Вывод онлайне с сервера на сайте или форуме.

Desquire

Гений мысли
Партнер
Сообщения
1 808
Розыгрыши
11
Репутация
1 389
Реакции
1 314
Баллы
1 808
Меня довольно часто спрашивают как вывести онлайн на форуме или на промо странице.
Брать за это деньги уже не позволяет совесть, поэтому специально для 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

Дальше нужно вывести онлайн или % на сайте.

Рассмотрим оба варианта вывода.
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 Я только учусь, мой код может быть корявым и не читаемым, но я учусь. Буду рад критики, и если объясните как правильно.
Кик, если будет не лень, поправь оформление как тебе нравится.
 

Вложения

  • online.rar
    5,2 КБ · Просмотры: 384
Очень нужна разработка та XenForo С выводом онлайна л2 в интернете нету не чего похожего, + это уже не работает