2010-09-21 3 views
2

Я работаю на веб-сайте (который состоит из cms с форумом), и я хочу дать каждому пользователю точки для выполнения определенных задач (++ everytime), которые в конечном итоге должны дать им звание.Простой или лучший способ сделать это?

E.g. если бы пользователь сделал сообщение, они получили бы 5 очков, если бы пользователь отправил нить/тему, они получили бы 20 очков и так далее, и ряды были бы похожи, если точки над М и ниже, чем в MX, они будут ранг R и т. д.

M = Минимальные баллы, необходимые для получения звания.

MX = Максимальные баллы, необходимые для получения звания.

R = Ранг (например, начинающий, мастер и т. Д.).

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

Я в настоящее время хранения точек в БД MySQL, и присваивают ранг с помощью PHP с тем, если такие заявления так:

if ($points > 0 && < 100) { 
    $rank = 'Beginner'; 
} 

Является ли их какой-то класс, библиотека, функции, формулы, метод; вы можете предложить, что могло бы сделать это проще или лучше, как вы можете думать?

Cheers!

+0

Кстати, язык - это PHP. – Newbtophp

ответ

0

Кажется, что лучше сохранить ранжирование в БД и обновить его всякий раз, когда вы обновляете значение точки. Таким образом, вы не вычисляете ранг для каждого пользователя на каждом просмотре страницы. Представления будут происходить гораздо чаще, чем обновления.

Я не думаю, что это то, о чем вы просили. Только мои два цента.

EDIT: На втором взгляде я вижу, что в сообщении нет ничего, чтобы предположить, что вы еще не делали этого в первую очередь. Не стесняйтесь меня игнорировать.

5

Вам не нужно хранить как минимальные, так и макс. (Если значение точки для ваших рядов не Непоследовательное, я полагаю.) Я хотел бы сделать это, поставив свои ряды в массиве, индексированном значением мин для этого ранга, в обратном порядке:

$ranks = array(
    500 => 'Cthuloid', 
    250 => 'Veteran', 
    100 => 'Beginner', 
    50 => 'Noob' 
); 

Затем просто напишите петлю короткого замыкания, чтобы найти первый ранг, который больше или равен счету пользователя:

function getRankOfScore($score) 
{ 
    foreach ($ranks as $value => $name) { 
     if ($score >= $value) { 
      return $name; 
     } 
    } 
    return 'Unranked'; 
} 
Смежные вопросы