Вопросы, советы, возможные модификации и вообще все про модуль статистики кланов

Модератор: Exinaus, shw

#1528 Witold 15 фев 2012, 16:18
Тема для тех кто не имеет понятия в php
Предлагаю в тему скидывать коды и описание как их внедрить в модуль.
А то захотелось много вкладок вставить, как не знаю.
#1537 Exinaus 17 фев 2012, 01:54
Для тех кто не понимает совсем, это бесполезно. Но вот кто хоть немного понимает в php/html вот простенькое руководство. на примере редактирования одной из вкладок.
Это не описание как добавить еще одну вкладку со статистикой, это попытка описать принцип работы модуля, работы вкладок, и редактирования таблиц или добавления новых.

Итак, возьмем любую вкладку. Например "Общие Результаты". Для примера добавим в эту таблицу столбик данных о проценте побед игрока.
Вот так в файле body.php выглядит ее код:
Код: Выделить всё    <div id="tabs-2">
        <div align="center">
            <table id="stat2" class="tablesorter wid" cellspacing="1">             
                <thead>
                    <tr>
                        <th><?php echo $lang['name']; ?></th>
                        <?php foreach(array_keys($res[$rand_keys]['overall']) as $column){ ?>
                            <th class="{sorter: 'digit'}"><?php echo $column; ?></th>
                            <?php } ?>
                    </tr> 
                </thead>
                <tbody>
                    <?php foreach($res as $name => $val){ ?>
                        <tr>
                            <td><a href="<?php echo $config['base'].$name.'/'; ?>"
                                    target="_blank"><?php echo $name; ?></a></td>
                            <?php foreach($val['overall'] as $result){ ?>
                                <td><?php echo $result; ?></td>                             
                                <?php } ?>
                        </tr>
                        <?php } ?>
                </tbody> 
            </table>
        </div>
    </div>


Для начала: Сам модуль статистики использует для создания страницы два скрипта, первый (jQuery UI) делает так что-бы таблицы разбивались по вкладкам, и нажав на соотв. вкладку выводилась соотв. таблица.
А второй (Tablesorter) как раз для сортировки таблиц.

Поэтому код разбит на куски:
Код: Выделить всё        <div id="tabs-2"> // метка для первого скрипта
            <div align="center">
                <table id="stat2" class="tablesorter wid" cellspacing="1">   // метка для второго скрипта 


Так вот, если первый скрипт автоматически подхватывает информацию, то второму необходимо дополнительно сообщать о каждой новой таблице, в файле header.php
Для каждой новой таблицы, если вы будете создавать новую, добавлять строку, в которой указан уникальный, не повторяющийся id таблицы:

Код: Выделить всё                $("#stat2").tablesorter({sortList:[[0,0]], widgets: ['zebra']}); 


О структуре html тэгов <table> <thead> <tbody> <th> <td> ищите в гугле. Или вот тут: http://htmlbook.ru/html/table

Если рассматривать код этой вкладки дальше, то мы заметим несколько php циклов (будут выделены в коде).
Эта часть кода выводит заголовки таблицы

Код: Выделить всё                <thead>
                    <tr>
                        <th><?php echo $lang['name']; ?></th>
                        <?php foreach(array_keys($res[$rand_keys]['overall']) as $column){ /* начало первого цикла  */  ?>
                            <th class="{sorter: 'digit'}"><?php echo $column; ?></th>
                            <?php }  /* конец первого цикла */  ?>
                   </tr> 
                </thead>


Давайте рассмотрим циклы внимательнее, для новичков в php.
Цикл foeach выводит заголовки, полученные с помощью функции array_keys. То какие заголовки передаются в таблицу, мы выбираем сами исходя из выделенной части в переменной: $res[$rand_keys]['overall'].
В переменной (массиве) $res содержится абсолютно вся информация, которой оперирует скрипт. Именно в ней содержится все данные о каждом игроке, о технике, в общем о всем. Структура этой переменной описана в readme.txt, в архиве с модулем (Да, его надо читать, обязательно. Пока не поймете.). Хотя если правильно, там описана всего повторяющаяся часть переменной $res, для одного игрока (в модуле, в основном цикле, обычно доступна как $val, об этом будет пожже), а сама $res содержит данные для каждого игрока, с повторением указанной структуры для каждого.
В данном случае, переменная $res[$rand_keys]['overall'] обращается к этой части массива $res (копипаст из readme.txt), $rand_keys - это имя случайного мэмбера клана, используется только для получения данных о заголовках. Просто представьте что тут так должно быть.
Код: Выделить всё            [overall] => Array
                (
                    [Проведено боёв] => 652
                    [Побед] => 365
                    [Проигрышей] => 271
                    [Выжил в битвах] => 297
                )

Не обязательно все заголовки таблицы должны быть в цикле, мы можем указывать их вручную, каждый, или добавлять после цикла. Мы так и сделаем, добавим строчку:
Код: Выделить всё                <thead>
                    <tr>
                        <th><?php echo $lang['name']; ?></th>
                        <?php foreach(array_keys($res[$rand_keys]['overall']) as $column){ ?>
                            <th class="{sorter: 'digit'}"><?php echo $column; ?></th>
                            <?php } ?>
                        <th>% Побед</th>
                    </tr> 
                </thead>


Теперь рассмотрим часть кода выводящую все данные в таблице:

Код: Выделить всё                <tbody>
                    <?php foreach($res as $name => $val){ /* Начало основного цикла */ ?>
                        <tr>
                            <td><a href="<?php echo $config['base'].$name.'/'; ?>"
                                    target="_blank"><?php echo $name; ?></a></td>
                            <?php foreach($val['overall'] as $result){ /* Начало внутреннего цикла */ ?>
                                <td><?php echo $result; ?></td>                             
                                <?php } /* Конец внутреннего цикла */ ?>
                        </tr>
                        <?php } /* Начало основного цикла */ ?>
                </tbody>


Тут присутсвуют целых два цикла.
Первый foreach($res as $name => $val) - это и есть самый основной цикл, если поискать по файлу body.php то найдете именно такие строки в коде каждой вкладки. Он перебирает данные о каждом пользователе.
Это именно тот цикл с помощью которого мы получаем доступ ко всем необходимым данным по мэмберам в модуле. Если вы хотите выводить новые столбцы в таблице, рассчитывать новые данные для вывода и пр., все это должно происходить в теле данного цикла.
Этот цикл разбивает массив $res на две переменных. Первая, $name, это строка в которой содержится ник мембера клана. Вторая, массив $val, содержит все данные о игроке. Пример $val есть опять-же в readme.txt, о чем я писал выше.
Т.е. $val['overall']['Проведено боёв'] выдаст количество боев мэмберов клана.

Второй, отмеченный мной как внутренний, цикл foreach($val['overall'] as $result) просто выводит значения из массива overall. Т.е. если раньше мы выводили заголовки этого массива, теперь мы выводим значение.

Вот после него добавляем дополнительную строку, в которой будет рассчитываться процент побед ($val['overall']['Побед'])/($val['overall']['Проведено боёв']*100). Процент побед округляем до второго знака с помощью round().

Код: Выделить всё                <tbody>
                    <?php foreach($res as $name => $val){ /* Начало основного цикла */ ?>
                        <tr>
                            <td><a href="<?php echo $config['base'].$name.'/'; ?>"
                                    target="_blank"><?php echo $name; ?></a></td>
                            <?php foreach($val['overall'] as $result){ /* Начало внутреннего цикла */ ?>
                                <td><?php echo $result; ?></td>                             
                                <?php } /* Конец внутреннего цикла */ ?>
                                <td><?php echo round(($val['overall']['Побед'])/($val['overall']['Проведено боёв'])*100,2); ?></td>
                        </tr>
                        <?php } /* Конец основного цикла */ ?>
                </tbody>


Ну вот где-то вот так.
В качестве подсказки и тренировки, в модуле есть $res[$rand_keys]['rating'], который не выводится во вкладках. Попробуйте создать новую вкладку, на основании кода вот этой вкладки. Необходимо будет изменить всего 3 слова.
#1540 Edrard 17 фев 2012, 23:10
Огромное спасибо Exinaus, о таком описания, можно было только мечтать, если не против, я заберу его в отдельную тему и прикреплю сверху?
#1541 Exinaus 18 фев 2012, 00:03
Я не против, конечно :oops:
#5052 asale 29 июн 2012, 01:32
Что правда, то правда. Для меня это реально бесполезно в это вникнуть
#5056 atompost 29 июн 2012, 06:25
Те кто хочет вставить картинку вместо [info] для просмотра статистики отдельного игрока, как у меня на картинке

 Читать дальше




в папке/tabs находим файл roster.php
находим в нем следующий код

Код: Выделить всё<td><a href="./main.php?nickname=<?php echo $val['name']; ?>" target="_self"><info></a>&nbsp;&nbsp;&nbsp;&nbsp;
<a href="<?php echo $config['base'].$val['name'].'/'; ?>" target="_blank"><?php echo $val['name']; ?></a></td>


меняем его на

Код: Выделить всё<td><a href="./main.php?nickname=<?php echo $val['name']; ?>" target="_self"><img src="images/info.png"></a>&nbsp;&nbsp;&nbsp;&nbsp;
<a href="<?php echo $config['base'].$val['name'].'/'; ?>" target="_blank"><?php echo $val['name']; ?></a></td>


картинку с именем info.png (которую вы хотите видеть) кидаем в папку /images

наслаждаемся :ugeek:
Вложения
info.png
info.png (2.35 КБ) Просмотров: 3027
#5066 atompost 29 июн 2012, 13:45
Для тех кто хочет сделать такую вкладку как у меня (ниже под спойлером)

 Читать дальше



И так, начнем!

из папки /tabs берем стандартную вкладку tank10.php открываем ее редактором (я пользуюсь Notepad++, в нем есть отличная подсветка синтаксиса PHP) :)

Находим в нем вот такой код:

Код: Выделить всёecho $percent.'% ('.$val['tank'][$clvl][$type][$column]['total'].'/'.$val['tank'][$clvl][$type][$column]['win'].')';
                                        }else{
                                            echo '0% (0/0)';


и заменяем его вот на этот:

Код: Выделить всё$color1 = '';
$color2 = '';
$num_war= '';
$num_war = $val['tank'][$clvl][$type][$column]['total'];
          if ($percent > 49 && $num_war > 100)  {
             $color1 = '<span style="color:green">';
             $color2 = '</span>';
                      if ($column=='ИС-7') {$column='IS-7';}
                      if ($column=='ИС-4') {$column='IS-4';}
                                echo '<img src="images/'.$column.'.png">';
                                           echo  $color1.$percent.'% побед'.$color2;
          }else{
                      echo '';}


А теперь попытаюсь обьяснить, что здесь означает каждая строчка (я сам не гуру в PHP, но пытаюсь учиться, пока, что на таких вот простых примерах)

И так, начнем!

Код: Выделить всё$color1 = '';
$color2 = '';
$num_war= '';
$num_war = $val['tank'][$clvl][$type][$column]['total'];


здесь мы обьявляем переменные и присваеваем переменной $num_war знаечение $val['tank'][$clvl][$type][$column]['total'] в итоге в переменной $num_war количество боев кторые игрок откатал на этом танке.

идем далее.


Код: Выделить всёif ($percent > 49 && $num_war > 100)


здесь мы задаем условие: если (if) процент боев на этом танке больше 49% и (&&) количество боев на этом танке болше 100 тогда (об этом чуть ниже)

Код: Выделить всё$color1 = '<span style="color:green">';
$color2 = '</span>';


задаем зеленый цвет для надписи

Код: Выделить всёif ($column=='ИС-7') {$column='IS-7';}
if ($column=='ИС-4') {$column='IS-4';}


тУт немного ереси от меня лично, пробовал через функцию str_replace чего то не получилось, поэтому пошел по самому простому пути, хоть и некрасиво (неграмотно), но все же работает!
А для чего это ? уместный вопрос !
дело в том, что названия мы берем названия танков из переменной $column, а они в ней находятся в формате UTF8. бррр. небуду разводить демогогию, просто мы преобразуем имена танков из русской раскладки в английскую, т.к. картинки в папке images лежат с иенами написаными латинскими символами. Понимаю, что бред, но как мог пытался обьяснить. (сильно не бейте)

далее:

Код: Выделить всёecho '<img src="images/'.$column.'.png">';
echo  $color1.$percent.'% побед'.$color2;


если наше условие выполняется (мы разобрали его выше) то "вляпываем" в ячейку картинку которая сответствует названию танка и подписваем количество побед.

уффф, самому страшно сколько "букавак" написал :)

ну и напоследок:

Код: Выделить всё}else{
        echo '';
           }


после }else{ проискодит запись "пустоты" если данные игрока не удовлетворяют описанному ранее условию

теперь сохраняем все наши изменения (лучше всего перед редактирование скачать tank10.php к себе на комп) переименовываем файл, ну например top10.php и заливаем его к себе на хост
Далее через админку подключаем новую вкладку (я думаю с этим проблем не возникнет)

ну вот и все, наша вкладка готова !

ах да, забыл, картинки танков в аттачментах
Вложения
(51.22 КБ) Скачиваний: 132
#5067 Exinaus 29 июн 2012, 15:55
atompost писал(а):тУт немного ереси от меня лично, пробовал через функцию str_replace чего то не получилось, поэтому пошел по самому простому пути, хоть и некрасиво (неграмотно), но все же работает!
А для чего это ??? уместный вопрос !!!
дело в том, что названия мы берем названия танков из переменной $column, а они в ней находятся в формате UTF8... бррр... небуду разводить демогогию, просто мы преобразуем имена танков из русской раскладки в английскую, т.к. картинки в папке images лежат с иенами написаными латинскими символами. Понимаю, что бред, но как мог пытался обьяснить. (сильно не бейте)

далее:

Код: Выделить всёecho '<img src="images/'.$column.'.png">';
echo  $color1.$percent.'% побед'.$color2;


если наше условие выполняется (мы разобрали его выше) то "вляпываем" в ячейку картинку которая сответствует названию танка и подписваем количество побед...

уффф, самому страшно сколько "букавак" написал :)

Для каждого танка существует параметр [link], который позволяет сгенерировать урл к картинке танка на сайте варгейминга. Вот вместо этого гемороя можно было воспользоваться этим решением.
Да и зачем туда картинку тулить? Только раздувать таблицу до неимоверных размеров, имхо.
#5069 atompost 29 июн 2012, 16:21
Exinaus писал(а):
atompost писал(а):Да и зачем туда картинку тулить? Только раздувать таблицу до неимоверных размеров, имхо.


а я что претендую на ГУРУ PHP ? как смог, так и сделал, я вообще с этим столкнулся месяц назад (с PHP) до этого как то не доводилось . просто по аналогии с другими языками и не без помощи google, и по поводу картинок, это - не отсебятина, меня попросили - я сделал, хоть и языкдля меня чужой.
#5071 Exinaus 29 июн 2012, 18:41
atompost писал(а):а я что претендую на ГУРУ PHP ??? как смог, так и сделал, я вообще с этим столкнулся месяц назад (с PHP) до этого как то не доводилось ... просто по аналогии с другими языками и не без помощи google, и по поводу картинок, это - не отсебятина, меня попросили - я сделал, хоть и языкдля меня чужой...

При чем тут это? Я вас что обвиняю? Я наоборот подсказываю как можно сделать проще, со стороны того что я знаю.

А картинка в каждой ячейке это извините вопрос не знания пхп, а вопрос эстетики. Ну вот попросили вас, ну хорошо .. но неужели нельзя посмотреть на то что вы создали, и сказать попросившему: Знаешь, из за этой картинки в каждой ячейке таблица по вертикали стала раз в 10 больше, и это минимум. Приходится минуту скролить страницу что бы посмотреть всю таблицу. Может не обязательно в ячейки, может лучше в заголовок, а из ячеек убрать?

Что мешает самому так подумать, посмотреть? Это ведь не вопрос знания или незнания пхп.
Ну а если вам так нравиться, то я что против? Я просто высказал свое мнение, не более ... а вы сами в праве поступать так как вам кажется лучше.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33

Реклама | Adv
cron