[ALPHA] MATERIAL Admin - ReFork на основе [SB: 1.5.4.7] [Bootstrap 3]

Статус
В этой теме нельзя размещать новые ответы.

Lord FEAR

Участник
Сообщения
429
Реакции
250
Короче сделал аву из профиля steam
В файле /themes/new_box/page_header.tpl 147 строка
PHP:
<div class="profile-pic">
    <img src="themes/new_box/img/profile-pics/1.jpg" />
</div>
заменить на
PHP:
<div class="profile-pic">
    {if $logged_in}
        {$avatar}
    {else}
        <img src="themes/new_box/img/profile-pics/1.jpg" />
     {/if}
</div>
В файле /includes/system-functions.php 1176 строка после "}" но перед "?>" вставить
PHP:
//Get steamID64
function getSteamID64($steamId){
    //Test input steamId for invalid format

    //Example SteamID: "STEAM_X:Y:ZZZZZZZZ"
    $gameType = 0; //This is X.  It's either 0 or 1 depending on which game you are playing (CSS, L4D, TF2, etc)
    $authServer = 0; //This is Y.  Some people have a 0, some people have a 1
    $clientId = ''; //This is ZZZZZZZZ.

    //Remove the "STEAM_"
    $steamId = str_replace('STEAM_', '' ,$steamId);

    //Split steamId into parts
    $parts = explode(':', $steamId);
    $gameType = $parts[0];
    $authServer = $parts[1];
    $clientId = $parts[2];

    //Calculate friendId
    $result = bcadd((bcadd('76561197960265728', $authServer)), (bcmul($clientId, '2')));
    return $result;
}
// Get Steam Avatar medium
function getSteamAvaMedium($id){
    $id64 = getSteamID64($id);
    $url = simplexml_load_file("http://steamcommunity.com/profiles/$id64/?xml=1");
    $ava = $url->avatarMedium;
    return "<img src=$ava >";
}
getSteamID64($steamId) - получаем steamid 64 из обычного
getSteamAvaMedium($id) - получаем аватар

В файле /pages/header.php 87 строка к строкам вида $theme->assign добавляем
PHP:
$theme->assign('avatar', getSteamAvaMedium($userbank->GetProperty("authid")));
 

Вложения

  • AvaExample2.png
    AvaExample2.png
    54.6 КБ · Просмотры: 64
Последнее редактирование:

alps

Участник
Сообщения
13
Реакции
1
Какую версию php лучше использовать для этого творения?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@alps, использую PHP 5.5.9, которая по умолчанию идёт в комплекте с ISP Manager - проблем не испытываю.
66c826d14384.png
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Lord FEAR, лучше всё таки через API это всё делать. Сами Вентили неоднократно признавались, что рано или поздно, параметр ?xml=1 будет удалён, потому что веб-сервер Steam Community временами нестабилен.

И вдобавок, насколько я помню, функция получения SteamID64 из SteamID2 уже есть в SB.
Я лучше предложу свою реализацию, если Астро позволит
 

Lord FEAR

Участник
Сообщения
429
Реакции
250
@Lord FEAR, лучше всё таки через API это всё делать. Сами Вентили неоднократно признавались, что рано или поздно, параметр ?xml=1 будет удалён, потому что веб-сервер Steam Community временами нестабилен.

И вдобавок, насколько я помню, функция получения SteamID64 из SteamID2 уже есть в SB.
Я лучше предложу свою реализацию, если Астро позволит
Так и сделал по началу, но потом вспомнил что ключ убрали в последней обнове.
Вот вариант через API с ключом
PHP:
function getSteamAvaMedium($id){
    $id64 = getSteamID64($id);
    $kay = STEAMAPIKEY;
    $shit = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=$kay&steamids=$id64");
    $json = json_decode($shit);
    return "<img src=\"{$json->response->players[0]->avatarmedium}\">";
}
SteamID64 уже есть, но он в файле админки и из других к нему нет доступа.
Наше дело предложить, я не заставляю использовать свою реализацию. Просто выложил для всех и не хотелось бы с каждой обновой редактировать файлы под себя
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
Много лишних переменных, в любом случае. И если API отдаст ошибку (такое может быть), то вместо аватарки будет значок "убитой картинки", ибо проверок нет.
 

Lord FEAR

Участник
Сообщения
429
Реакции
250
Много лишних переменных, в любом случае. И если API отдаст ошибку (такое может быть), то вместо аватарки будет значок "убитой картинки", ибо проверок нет.
Без потери работоспособности можно убрать только $shit, если объяснишь как убрать другие буду благодарен. Да и не те здесь масштабы чтобы лишние переменные повлияли на нагрузку.
PHP:
function getSteamAvaMedium($id){
    $id64 = getSteamID64($id);
    $kay = STEAMAPIKEY;
    $json = json_decode(file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=$kay&steamids=$id64"));
    if ($json->response->players[0]->avatarmedium){
        return "<img src=\"{$json->response->players[0]->avatarmedium}\">";
    }else{
        return "<img src='themes/new_box/img/profile-pics/1.jpg' />";
    }
}
@Lord FEAR, например, так:
C-подобный:
function getSteamAvaMedium($id){
  $avatar = 'themes/new_box/img/profile-pics/1.jpg';
  $json = json_decode(file_get_contents(sprintf("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=%s&steamids=%d", STEAMAPIKEY, getSteamID64($id)));
  if (isset($json->response->players[0]->avatarmedium))
    $avatar = $json->response->players[0]->avatarmedium;
  return sprintf('<img src="%s" />', $avatar);
}
Ну да, гораздо приятнее. Только скобочку ещё одну в конце поставь))
json_decode(file_get_contents(sprintf("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=%s&steamids=%d", STEAMAPIKEY, getSteamID64($id))));
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Lord FEAR, например, так:
C-подобный:
function getSteamAvaMedium($id){
  $avatar = 'themes/new_box/img/profile-pics/1.jpg';
  $json = json_decode(file_get_contents(sprintf("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=%s&steamids=%d", STEAMAPIKEY, getSteamID64($id))));
  if (isset($json->response->players[0]->avatarmedium))
    $avatar = $json->response->players[0]->avatarmedium;
  return sprintf('<img src="%s" />', $avatar);
}
--- Добавлено позже ---
А, да, забыл. Мой косяк)
 
Последнее редактирование:

AS TRO

Участник
Сообщения
1,159
Реакции
750
@Lord FEAR, а ты бы кеширование аватарок сделал, было бы вообще отлично. Я даже бы добавил в сб...
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
Напугали :D
*ушёл пилить*

ЗЫ: Я бы вообще аватары пильнул с помощью AJAX'а. Так скорость загрузки страницы не теряется. Но аватары не сразу (надо около секунды) появляются.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@AS TRO, я не бесконечный кэш делаю. Steam при смене пользовательских аватаров, изменяет и ссылку на них. Потому я сделал так, чтобы аватары в кэше хранились 1 сутки. Но перезаписываться значение в кэше будет только при запросе аватара пользователя.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@AS TRO, сделаю тогда регулируемым параметром в config.php, чтобы каждый сам себе выбирал значение.
--- Добавлено позже ---
Поделюсь результатом пока что:
ce9b89216615.png
На фоне другой админ.

Сейчас доработаю всё, и оставлю здесь информацию, как сделать так же.
Правда насчёт местоположения аватара я не уверен, ибо я не верстальщик :)
--- Добавлено позже ---
Сделал.

Перед тем, как делать, обратите внимание: Я давно не обновлял свой SourceBans, потому номера строк могут различаться.
Для работы требуется настроенный Steam Web API ключ. Если он не указан - аватарки соответственно не будут отображаться.
В includes/system-functions.php перед строкой ?> вставить это:
PHP:
function GetCommunityIDFromSteamID2($sid) {
  /**
    * Thanks Valve and AlliedModders!
    * https://developer.valvesoftware.com/wiki/SteamID#Steam_Community_ID_as_a_Steam_ID
    * https://forums.alliedmods.net/showthread.php?t=60899
    *
    * STEAM_X:Y:Z
    * V=76561197960265728
    * W=Z*2+V+Y
    */

  $result = array();
  $res = preg_match('/STEAM_[0-9]:(0|1):([0-9]{1,})/', $sid, $result);
  if ($res) return ($result[2] * 2) + 76561197960265728 + $result[1];
  else return false;
}

function GetUserAvatar($sid) {
  global $userbank;
  $AvatarFile = "themes/new_box/img/profile-pics/1.jpg";
  $UserFound = false;
  $CacheFile = sprintf('%simages/avatars.cache', ROOT);
  if ($userbank->is_logged_in()) {
    $communityid = GetCommunityIDFromSteamID2($sid);
    if (file_exists($CacheFile)) {
      if (is_readable($CacheFile) && is_writable($CacheFile)) {
        $Cache = json_decode(file_get_contents($CacheFile), true);
        foreach ($Cache['cache'] as &$ce) {
          if ($ce['sid'] == $communityid && $ce['time'] < time()+AVATAR_LIFETIME) {
            $UserFound = true;
            $AvatarFile = $ce['avatar'];
            break;
          }
        }

        if (!$UserFound && defined('STEAMAPIKEY') && !empty(STEAMAPIKEY)) {
          // Cache avatar
          $SteamResponse = json_decode(file_get_contents(sprintf("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=%s&steamids=%d", STEAMAPIKEY, $communityid)));
          if (isset($SteamResponse->response->players[0]->avatarfull)) {
            $AvatarFile = $SteamResponse->response->players[0]->avatarfull; // return this avatar
            // And write to cache
            $CacheWritted = false;
            foreach ($Cache['cache'] as &$ce) {
              if ($ce['sid'] == $communityid) {
               $CacheWritted = true;
                $ce['avatar'] = $AvatarFile;
                $ce['time'] = time()+AVATAR_LIFETIME;
                break;
              }
            }
            if (!$CacheWritted) $Cache['cache'][] = array('sid' => $communityid, 'avatar' => $AvatarFile, 'time' => time()+AVATAR_LIFETIME);
            file_put_contents($CacheFile, json_encode($Cache));
          }
        }
      }
    } else {
      file_put_contents($CacheFile, '{"cache":[]}');
      return GetUserAvatar($sid);
    }
  }
  return $AvatarFile;
}

В файле config.php вписываем перед строчкой с Steam Web API ключом (при необходимости увеличиваем или уменьшаем значение):
PHP:
define('AVATAR_LIFETIME', 86400); // Avatar lifetime in cache (seconds)

Создаём файл /images/avatars.cache с правами 0664 и добавляем в него следующий текст:
C-подобный:
{"cache":[]}
Замечание: Если файл не будет создан вручную, скрипт попытается сам автоматически создать его. Но если не будет доступа на запись в папку, возможна ошибка.
SidePanel.png
В themes/new_box/page_header.tpl на строке 148 заменить:
C-подобный:
<img src="themes/new_box/img/profile-pics/1.jpg" />
на:
C-подобный:
<img src="{$avatar}" />

В pages/header.php перед строкой 99:
PHP:
$theme->display('page_header.tpl');
Вставить это:
PHP:
$theme->assign('avatar', GetUserAvatar($userbank->GetProperty('authid')));
AdminList.png
В themes/new_box/page_admin_admins_list.tpl находим строчку:
C-подобный:
<h2>Связь</h2>
И перед ней вставляем:
C-подобный:
<div style="text-align: center;padding-bottom: 20px;"><img src="{$admin.avatar}"></div>

В pages/admin.admins.php ищем:
PHP:
array_push($admin_list, $admin);
И перед этим вставляем:
PHP:
$admin['avatar'] = GetUserAvatar($userbank->GetProperty('authid', $admin['aid']));
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу