1 (23.08.2007 08:36 отредактировано nobody)

Тема: Привязка статуса к репутации. Как?

Вроде не было еще такой темы... В стандартном варианте форума статус (ранг, звание) меняется в зависимости от количества сообщений. Вопрос: как и можно ли вообще сделать, чтобы статус менялся в зависимости от репутации юзера?

PunBB.Ru ☭

Сайт nobody

Поделиться

2

Re: Привязка статуса к репутации. Как?

Статус вместе с привилегиями? Если да, то сложнее. Если же просто надо выводить вместо статуса репутацию, то ничего сложного, просто подредактировать viewforum.php и наверно еще profile.php.

Сайт BrokenBrake

Поделиться

3

Re: Привязка статуса к репутации. Как?

Нет, ты не верно понял. Статус не дает никаких привелегий, и вместо статуса выводить репутацию не нужно.
Статус - это всего лишь кусок текста под никнеймом. Например как на этом форуме - у меня "Профи", у тебя "В команде". Сейчас он меняется по достижении определенного количества постов, а мне нужно, чтобы он менялся по достижении определенного рейтина репутации (1,2, 5, 10 и т.д.). Но как это сделать, хз...

PunBB.Ru ☭

Сайт nobody

Поделиться

4

Re: Привязка статуса к репутации. Как?

Понимаю. Тогда ничего конкретного не смогу посоветовать, сам второй день с PunBB smile Но я бы сперва посмотрел, как устроено повышение статуса в зависимости от количества сообщений, и по образу и подобию попробовал бы брать данные не с количества постов, а с репутации...
По идее, тогда неплохо бы под это дело и в админке пункт, такой же, как когда настраиваешь статусы, только там другой параметр фигурировать будет.

Сайт BrokenBrake

Поделиться

5

Re: Привязка статуса к репутации. Как?

Решил сейчас засесть и покопаться, где там эти ранги считаются. Насколько понял, файл admin_ranks.php за это отвечает, а конкретно эти куски кода:

// Add a rank
if (isset($_POST['add_rank']))
{
    confirm_referrer('admin_ranks.php');

    $rank = trim($_POST['new_rank']);
    $min_posts = $_POST['new_min_posts'];

    if ($rank == '')
        message('You must enter a rank title.');

    if (!preg_match('#^\d+$#', $min_posts))
        message('Minimum posts must be a positive integer value.');

    // Make sure there isn't already a rank with the same min_posts value
    $result = $db->query('SELECT 1 FROM '.$db->prefix.'ranks WHERE min_posts='.$min_posts) or error('Unable to fetch rank info', __FILE__, __LINE__, $db->error());
    if ($db->num_rows($result))
        message('There is already a rank with a minimun posts value of '.$min_posts.'.');

    $db->query('INSERT INTO '.$db->prefix.'ranks (rank, min_posts) VALUES(\''.$db->escape($rank).'\', '.$min_posts.')') or error('Unable to add rank', __FILE__, __LINE__, $db->error());

    // Regenerate the ranks cache
    require_once PUN_ROOT.'include/cache.php';
    generate_ranks_cache();

    redirect('admin_ranks.php', 'Rank added. Redirecting …');
}


// Update a rank
else if (isset($_POST['update']))
{
    confirm_referrer('admin_ranks.php');

    $id = intval(key($_POST['update']));

    $rank = trim($_POST['rank'][$id]);
    $min_posts = trim($_POST['min_posts'][$id]);

    if ($rank == '')
        message('You must enter a rank title.');

    if (!preg_match('#^\d+$#', $min_posts))
        message('Minimum posts must be a positive integer value.');

    // Make sure there isn't already a rank with the same min_posts value
    $result = $db->query('SELECT 1 FROM '.$db->prefix.'ranks WHERE id!='.$id.' && min_posts='.$min_posts) or error('Unable to fetch rank info', __FILE__, __LINE__, $db->error());
    if ($db->num_rows($result))
        message('There is already a rank with a minimun posts value of '.$min_posts.'.');

    $db->query('UPDATE '.$db->prefix.'ranks SET rank=\''.$db->escape($rank).'\', min_posts='.$min_posts.' WHERE id='.$id) or error('Unable to update rank', __FILE__, __LINE__, $db->error());

    // Regenerate the ranks cache
    require_once PUN_ROOT.'include/cache.php';
    generate_ranks_cache();

    redirect('admin_ranks.php', 'Rank updated. Redirecting …');
}


// Remove a rank
else if (isset($_POST['remove']))
{
    confirm_referrer('admin_ranks.php');

    $id = intval(key($_POST['remove']));

    $db->query('DELETE FROM '.$db->prefix.'ranks WHERE id='.$id) or error('Unable to delete rank', __FILE__, __LINE__, $db->error());

    // Regenerate the ranks cache
    require_once PUN_ROOT.'include/cache.php';
    generate_ranks_cache();

    redirect('admin_ranks.php', 'Rank removed. Redirecting …');
}
<?php

$result = $db->query('SELECT id, rank, min_posts FROM '.$db->prefix.'ranks ORDER BY min_posts') or error('Unable to fetch rank list', __FILE__, __LINE__, $db->error());
if ($db->num_rows($result))
{

?>
<?php

    while ($cur_rank = $db->fetch_assoc($result))
        echo "\t\t\t\t\t\t\t\t".'<tr><td><input type="text" name="rank['.$cur_rank['id'].']" value="'.pun_htmlspecialchars($cur_rank['rank']).'" size="24" maxlength="50" /></td><td><input type="text" name="min_posts['.$cur_rank['id'].']" value="'.$cur_rank['min_posts'].'" size="7" maxlength="7" /></td><td><input type="submit" name="update['.$cur_rank['id'].']" value="Update" />&nbsp;<input type="submit" name="remove['.$cur_rank['id'].']" value="Remove" /></td></tr>'."\n";

?>

Попробую поэксперементировать... Правда еще нужно понять, как и где считается репутация smile

PunBB.Ru ☭

Сайт nobody

Поделиться