Кеширование статистики пользователя (альтернатива)

Dream

Пользователь
#1
Автор: Dream
Установка: 2 мин.
Описание: Мод кеширует статистику пользователя на главной странице + добавляет количество сидируемых, скачиваемых раздач юзера.
Установка:

Открыть файл: functions.php и найти:
PHP:
function get_bt_userdata ($user_id)
заменить всю фуньку:
PHP:
function get_bt_userdata ($user_id)
{
    if (!$get_bt_sql = CACHE('bb_cache')->get('get_bt_sql'))
    {
        $get_bt_sql = DB()->fetch_row("
            SELECT bt.*, SUM(tr.speed_up) as speed_up, SUM(tr.speed_down) as speed_down
            FROM      ". BB_BT_USERS  ." bt
            LEFT JOIN ". BB_BT_TRACKER ." tr ON (bt.user_id = tr.user_id)
            WHERE bt.user_id = ". (int) $user_id ."
            GROUP BY bt.user_id
        ");
        CACHE('bb_cache')->set('get_bt_sql', $get_bt_sql, 300);
    }
 
    return $get_bt_sql;
}
найти фуньку:
PHP:
function show_bt_userdata ($user_id)
всю заменить на:
PHP:
function show_bt_userdata ($user_id)
{
    global $lang;
 
    $btu = get_bt_userdata($user_id);
 
    if (!$row = CACHE('bb_cache')->get('row'))
    {
        $row = DB()->fetch_row("
            SELECT COUNT(tor.user_id) AS all_count,
                    SUM(tor.seeder) AS seeding, tor.topic_id,
                    SUM(tor.releaser) AS releasing, tor.user_id, u.user_id
            FROM ". BB_USERS ." u, ". BB_BT_TRACKER . " tor
            WHERE tor.user_id = u.user_id
            AND tor.user_id = ". $user_id ."
        ");
        CACHE('bb_cache')->set('row', $row, 300);
    }
 
    $seeding = $row['seeding'] - $row['releasing'];
    if ($seeding < 0)
    {
        $seeding = 0;
    }
    $leeching = $row['all_count'] - $row['seeding'];
 
    $GLOBALS['template']->assign_vars(array(
        'SHOW_BT_USERDATA' => true,
        'UP_TOTAL'        => humn_size($btu['u_up_total']),
        'UP_BONUS'        => humn_size($btu['u_up_bonus']),
        'RELEASED'        => humn_size($btu['u_up_release']),
        'DOWN_TOTAL'      => humn_size($btu['u_down_total']),
        'DOWN_TOTAL_BYTES' => $btu['u_down_total'],
        'USER_RATIO'      => get_bt_ratio($btu),
        'MIN_DL_FOR_RATIO' => humn_size(MIN_DL_FOR_RATIO),
        'MIN_DL_BYTES'    => MIN_DL_FOR_RATIO,
        'AUTH_KEY'        => ($btu['auth_key']) ? $btu['auth_key'] : $lang['NONE'],
 
        'TD_DL'            => humn_size($btu['down_today']),
        'TD_UL'            => humn_size($btu['up_today']),
        'TD_REL'          => humn_size($btu['up_release_today']),
        'TD_BONUS'        => humn_size($btu['up_bonus_today']),
        'TD_POINTS'        => ($btu['auth_key']) ? $btu['points_today'] : '0.00',
 
        'YS_DL'            => humn_size($btu['down_yesterday']),
        'YS_UL'            => humn_size($btu['up_yesterday']),
        'YS_REL'          => humn_size($btu['up_release_yesterday']),
        'YS_BONUS'        => humn_size($btu['up_bonus_yesterday']),
        'YS_POINTS'        => ($btu['auth_key']) ? $btu['points_yesterday'] : '0.00',
 
        'SPEED_UP'        => humn_size($btu['speed_up'], 0, 'KB') .'/s',
        'SPEED_DOWN'      => humn_size($btu['speed_down'], 0, 'KB') .'/s',
   
        'RELEASING'        => $row['releasing'] ? $row['releasing'] : 0,
        'SEEDING'          => $seeding ? $seeding : 0,
        'LEECHING'        => $leeching ? $leeching : 0,
    ));
}
открыть page_header.tpl найти:
HTML:
<!-- IF $bb_cfg['seed_bonus_enabled'] --><tr><td>{L_SEED_BONUS}</td><td><a href="profile.php?mode=bonus"><span class="points bold">{POINTS}</span></a></td></tr><!-- ENDIF -->
после влепить:
HTML:
             <tr><td>{L_RELEASING}:</td><td class="seedmed bold">{RELEASING}</td></tr>
       <tr><td>{L_SEEDING}:</td><td class="seedmed bold">{SEEDING}</td></tr>
       <tr><td>{L_LEECHING}:</td><td class="leechmed bold">{LEECHING}</td></tr>
 

macfleg

Пользователь
#4
Dream, добавляет количество сидируемых, скачиваемых раздач юзера. Это по моему лишнее
 

drew

Пользователь
#6
Ragnar, правильно. Надо делать новую фуньку. А на добавлять к старой. Тогда будет все ок.
 
G

Gemini_13

Гость
#8
drew, та не, не надо отдельная фунька. сделает кеш для каждого юзера и все. просто в моде один кеш на всех, а надо на каждого юзера свой. спешил наверно, старался
 

drew

Пользователь
#9
Берешь
PHP:
function show_bt_userdata_header ($user_id)
{
    global $lang;
 
    $btu = get_bt_userdata($user_id);
 
    if (!$row = CACHE('bb_cache')->get('row'))
    {
        $row = DB()->fetch_row("
            SELECT COUNT(tor.user_id) AS all_count,
                    SUM(tor.seeder) AS seeding, tor.topic_id,
                    SUM(tor.releaser) AS releasing, tor.user_id, u.user_id
            FROM ". BB_USERS ." u, ". BB_BT_TRACKER . " tor
            WHERE tor.user_id = u.user_id
            AND tor.user_id = ". $user_id ."
        ");
        CACHE('bb_cache')->set('row', $row, 300);
    }
 
    $seeding = $row['seeding'] - $row['releasing'];
    if ($seeding < 0)
    {
        $seeding = 0;
    }
    $leeching = $row['all_count'] - $row['seeding'];
 
    $GLOBALS['template']->assign_vars(array(
        'SHOW_BT_USERDATA' => true,
        'UP_TOTAL'        => humn_size($btu['u_up_total']),
        'UP_BONUS'        => humn_size($btu['u_up_bonus']),
        'RELEASED'        => humn_size($btu['u_up_release']),
        'DOWN_TOTAL'      => humn_size($btu['u_down_total']),
        'DOWN_TOTAL_BYTES' => $btu['u_down_total'],
        'USER_RATIO'      => get_bt_ratio($btu),
        'MIN_DL_FOR_RATIO' => humn_size(MIN_DL_FOR_RATIO),
        'MIN_DL_BYTES'    => MIN_DL_FOR_RATIO,
        'AUTH_KEY'        => ($btu['auth_key']) ? $btu['auth_key'] : $lang['NONE'],
 
        'TD_DL'            => humn_size($btu['down_today']),
        'TD_UL'            => humn_size($btu['up_today']),
        'TD_REL'          => humn_size($btu['up_release_today']),
        'TD_BONUS'        => humn_size($btu['up_bonus_today']),
        'TD_POINTS'        => ($btu['auth_key']) ? $btu['points_today'] : '0.00',
 
        'YS_DL'            => humn_size($btu['down_yesterday']),
        'YS_UL'            => humn_size($btu['up_yesterday']),
        'YS_REL'          => humn_size($btu['up_release_yesterday']),
        'YS_BONUS'        => humn_size($btu['up_bonus_yesterday']),
        'YS_POINTS'        => ($btu['auth_key']) ? $btu['points_yesterday'] : '0.00',
 
        'SPEED_UP'        => humn_size($btu['speed_up'], 0, 'KB') .'/s',
        'SPEED_DOWN'      => humn_size($btu['speed_down'], 0, 'KB') .'/s',
 
        'RELEASING'        => $row['releasing'] ? $row['releasing'] : 0,
        'SEEDING'          => $seeding ? $seeding : 0,
        'LEECHING'        => $leeching ? $leeching : 0,
    ));
}
А вывод уже сам сделаешь .
 
G

Gemini_13

Гость
#10
drew, зачем отдельная фунька? используй ту, которая уже есть
PHP:
CACHE('bb_cache')->set('row', $row, 300);
грубо говоря поменяй на:
PHP:
CACHE('bb_cache')->set('row_'. $user_id, $row, 300);
ну и само собой другой вывод.

получаешь на каждого юзера свой кеш без дополнительных функций. Причем в твоем коде те же грабли, один кеш на всех
 
Сверху