1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

1.1.2 Ищу плагин "Топ голосующих"

Тема в разделе "Основные вопросы по XenForo", создана пользователем Nicolayka, 31.03.2012.

Загрузка
  1. Nicolayka

    Nicolayka Местный

    Регистрация:
    25.02.12
    Сообщения:
    70
    Симпатии:
    13
    Версия XF:
    1.4.4
    Всем снова привет. Есть скрипт, который записывает каждое голосование за сервер в БД. Нужно сделать вывод списка юзеров, активно голосующих по убыванию, вывести ник, аватарку, кол-во голосований и приписать номер позиции в БД. Что-то по типу такого.
    [​IMG]
    P.S С меня лайк и уважение)))

    Вот сам скрипт:
    Инструкция:
    SQL файл
    Код:
    -- ----------------------------
    -- Table structure for mmotop
    -- ----------------------------
    CREATE TABLE `mmotop` (
      `vote_id` int(11) unsigned NOT NULL default '0',
      `vote_time` timestamp NOT NULL default '0000-00-00 00:00:00',
      `vote_ip` text NOT NULL,
      `vote_char_name` text character set utf8 NOT NULL,
      `vote_count` int(11) unsigned NOT NULL default '0',
      PRIMARY KEY  (`vote_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    -- ALTER
    ALTER TABLE account
      ADD COLUMN `vote_count` int(11) unsigned NOT NULL default '0';
     
    
    mmotop.php
    PHP:
    <?php
     
    //Copyright GriffonHeart 2010
     
    //error_reporting(0);
     
    $dbhost="localhost";    //Хост сервера MySQL
    $dblogin="mangos";      //Логин MySQL
    $dbpass="11111111";      //Пароль MySQL
    $logindatabase "realmd";        //Имя базы с аккаунтами
    $chardatabase  "characters1";  //Имя базы первого реалма
    $chardatabase2 "characters2";  //Имя базы второго реалма
    $table  "mmotop";              //Табличка со статистикой для первого реалма
    $table2 "mmotop_rol";          //Табличка со статистикой для второго реалма
     
    $realmid $argv[1];              //Получаем номер реалма с командной строки
     
    if($realmid==2)                  //Выбираем реалм в зависимости от параметра командной строки
    {
        
    $chardatabase=$chardatabase2;
        
    $table=$table2;
    }
     
    function 
    dbconnect ($database)
    {
        global 
    $dbhost,$dblogin,$dbpass;
        
    ///////Start Open MySQL-connection///////////////////
        
    $openConndb mysql_connect$dbhost$dblogin$dbpasstrueMYSQL_CLIENT_COMPRESS );
        if (
    mysql_error())$myerror=mysql_error();
        if(
    strstr($myerror,"Can't connect to MySQL server")){echo("Ошибка. Не могу подключиться к серверу базы данных. Обратитесь к администратору.");return;}
        
    $dbSelected mysql_select_db$database$openConndb );
        
    setlocale(LC_ALL'ru_RU.utf-8');
        
    mysql_query("SET character_set_results='utf8'");
        
    mysql_query("SET NAMES 'utf8'");
        
    //    mysql_query("SET CHARACTER SET `utf8`");
        
    if(mysql_error())$myerror=mysql_error();
        if(
    strstr($myerror,"Access denied for user")){echo("Ошибка. Доступ к базе данных запрещ н. обратитесь к администратору.");return;}
        if(
    strstr($myerror,"Unknown database")){echo("Ошибка. Неизвестная база данных. обратитесь к администратору.");return;}
        
    /////////End Open MySQL-connection/////////////////////
        
    return $openConndb;
    }
     
    $openConndb dbconnect($logindatabase);
    $openConndb2 dbconnect($chardatabase);
     
    //setlocale(LC_ALL, 'ru_RU.utf-8');
    mysql_query("SET character_set_results='cp1251'",$openConndb);
    mysql_query("SET NAMES 'cp1251'",$openConndb);
     
    mysql_query("SET character_set_results='cp1251'",$openConndb2);
    mysql_query("SET NAMES 'cp1251'",$openConndb2);
     
    if(
    $realmid==2)
        
    $fcontent=file("http://wow.mmotop.ru/stats/XXXXXXXXXXX/XXXXXXXXXX/XXX.txt");  //Файл со статистикой для первого реалма
    else
    $fcontent=file("http://wow.mmotop.ru/stats/XXXXXXXXXXX/XXXXXXXXXX/XXX.txt");  //Файл со статистикой для второго реалма
     
    $query "SELECT MAX(vote_id) FROM ".$table;
    $result mysql_query($query$openConndb);
    $row=mysql_fetch_row($result);
    $max_id $row[0];
     
    for(
    $j=0;$j<sizeof($fcontent);$j++)
    {
      
    $temp=explode("\t",$fcontent[$j]);
      
    $vote_id  = (int)trim($temp[0]);
      
    $vote_time trim($temp[1]);
     
      
    $vote_time explode(" ",$vote_time);
      
    $temp1 explode(".",$vote_time[0]);
      
    //$temp2 = explode(":",$vote_time[1]);
      
    $vote_time $temp1[2]."-".$temp1[1]."-".$temp1[0]." ".$vote_time[1];
     
      
    $vote_ip  trim($temp[2]);
      
    $vote_char_name trim($temp[3]);
      
    $vote_count    = (int)trim($temp[4]);
      
    //echo "id: ".$vote_id." time: ".$vote_time." ip: ".$vote_ip." name: ".$vote_char_name." count: ".$vote_count."\n";
     
     
      
    if(strlen($vote_char_name) <= 0)
          continue;
     
      
    $query "SELECT vote_id FROM ".$table." WHERE vote_id = ".$vote_id;
      
    $result mysql_query($query$openConndb);
      
    $row=mysql_fetch_row($result);
      if(
    $row[0])
          continue;
     
      
    //if($vote_id<=$max_id)
      //    continue;
     
      
    $query "INSERT INTO ".$table." (vote_id,vote_time,vote_ip,vote_char_name,vote_count) VALUES ('".$vote_id."','".$vote_time."','".$vote_ip."','".mysql_es$
      
    $result mysql_query($query$openConndb);
      
    $myerror="";
      if (
    mysql_error())
      {
          
    $myerror=mysql_error();
          echo 
    $myerror."\n";
      }
     
      
    $query "SELECT account FROM characters WHERE name = '".$vote_char_name."';";
      
    //echo $query."\n";
      
    $result mysql_query($query$openConndb2);
      
    $row=mysql_fetch_row($result);
      
    $account $row[0];
      
    //echo $account."\n";
      
    if (mysql_error())
      {
    $myerror=mysql_error();
          echo 
    $myerror."\n";
      }
     
      
    $query "UPDATE account SET vote_count = vote_count + ".$vote_count." WHERE id = ".$account.";";
      
    //echo $query."\n";
      
    $result mysql_query($query$openConndb);
      if (
    mysql_error())
      {
          
    $myerror=mysql_error();
          echo 
    $myerror."\n";
      }
     
    }
     
    echo 
    "ok"
    ?>
    mmotopup.sh
    Код:
    #!/bin/sh
     
    /usr/bin/php /usr/local/mangos/bin/mmotop.php 1
    /usr/bin/php /usr/local/mangos/bin/mmotop.php 2
     
  2. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    А при чем тут ксен, если используется какой-то внешний скрипт голосований?
     
    wergio нравится это.
  3. Nicolayka

    Nicolayka Местный

    Регистрация:
    25.02.12
    Сообщения:
    70
    Симпатии:
    13
    Версия XF:
    1.4.4
    Нужно сделать вывод информации о юзере (его положении в рейтинге) и т.д.
     
  4. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Речь не об этом. Какой скрипт голосования используется?
     
  5. Nicolayka

    Nicolayka Местный

    Регистрация:
    25.02.12
    Сообщения:
    70
    Симпатии:
    13
    Версия XF:
    1.4.4
    Обновил 1-ый пост. Там скрипт выложил

    Вот как написано сделать список голосующих и общее кол-во голосов
    PHP:
    <?
    //    Тут коннектимся к базе данных
    $mmotoplink = @mysql_connect('localhost''логин''пароль') or die ('Невозможно установить соеденение с базой!');                         
    //    Выбираем базу данных
    @mysql_select_db('имя БД'$mmotoplink) or die ('Найти базу с таким именем не удалось!');
    //    Запрос на выборку всех имен пользователей (уникальных)
    $sql mysql_query("SELECT DISTINCT `vote_char_name` FROM `mmotop`");
    //    Циклом переберем все
    while($row=mysql_fetch_array($sql)){
    //    Тут согласно имени сделаем запрос на выборку значений
    $sqlcount mysql_query("SELECT `vote_count` FROM `mmotop` WHERE `vote_char_name` LIKE '".$row['vote_char_name']."'");
    // Обнуляем значение
    $count "";
    while(
    $rowcount=mysql_fetch_array($sqlcount)){
    //    Суммируем
    $count $count+$rowcount['vote_count'];
    }
    //    Данные выходные имеются, решаем, что с ними делать (пока просто выведем)
    echo $row['vote_char_name']." ".$count."<br>";
    }
    ?>

    Только вот как всё это на форум поместить...
     
  6. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Это Вам проще либо самому написать, либо заказать.
    Дело в том, что тут ксен вообще никаким боком. Кстати, а база пользователей голосующих и ксена синхронизирована или соответствие потом делается?

    Самое простое - внешним скриптом из базы ксена выдергиваете информацию о пользователях с их аватарами и никами, соединяете ее с голосованиями, а затем формируете тот же HTML, который вставляете блоком в портал или еще куда. Все это в принципе не сложно, но зависимо от конкретного ресурса. Т.е. делается обычно под заказ без универсальности.
     
  7. Nicolayka

    Nicolayka Местный

    Регистрация:
    25.02.12
    Сообщения:
    70
    Симпатии:
    13
    Версия XF:
    1.4.4
    Базу форума синхронизовали с серверами (общая авторизация)
     
  8. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Не думаю, что кому-то будет интересно просто так для Вас это все писать.
     
  9. Nicolayka

    Nicolayka Местный

    Регистрация:
    25.02.12
    Сообщения:
    70
    Симпатии:
    13
    Версия XF:
    1.4.4
    Дык вот по-этому я и спрашиваю)
     
  10. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Ну так перенесите это в соответствующий раздел этого форума. Там и найдете исполнителя.
     
  11. Nicolayka

    Nicolayka Местный

    Регистрация:
    25.02.12
    Сообщения:
    70
    Симпатии:
    13
    Версия XF:
    1.4.4
    Нету денег к сожалению.. приходится своими силами.
     
  12. Димка

    Димка Местный

    Регистрация:
    05.04.12
    Сообщения:
    15
    Симпатии:
    0
    Версия XF:
    1.1.2
    PHP:
    <div id="result">Тут будет результат</div>
     
    <
    script>
            function 
    show_result ()
            {
                $.
    ajax({
                    
    url"http://ссылка_на_нужный.php",
                    
    success: function(html){
                        $(
    "#result").html(html);
                    }
                });
            }
            $(
    document).ready(function(){
                
    show_result();
            });               
    </script>
     

Поделиться этой страницей