Начисление силы и рейтинга за посты
Предыстория.
Есть молодой блог по инвайтам, в который запустили 10 человек.
Эти люди переносят свое творчество.
Ожидается через неделю-другую открыть регистрацию для всех.
И что же увидит молодняк?
Кучу юзеров и тем с 0 рейтингом (мы друг друга знаем и все труды тоже. основное время тратим на перенос, а не на чтение)
Что бы это избежать, было решенно ввести премирование за написание постов.
Начисляется:
+0,01 к рейтингу юзера, опубликовавшего топик
+0,2 к силе юзера, опубликовавшего топик
+ от 0.13 до 1.5 к блогу, в который написал юзер (зависит от его силы)
так же было установлен базовый рейтинг топика — в 1 (хотя его тоже можно менять в зависимости от силы юзера)
ls\classes\actions\ActionTopic.class.php
находим 374 строку и заменяем:
на:
ls\classes\modules\topic\mapper\Topic.mapper.class.php
25 строка:
заменяем на:
ps. Аналогичного успеха с стартовым рейтингом топика можно добится установив default 1 в таблице prefix_topic для поля topic_rating . Здесь же представлена заготовка для более гидкого и динамечиского примеирования нового топика
pss. Аналогично можно реализовать убавление рейтинга при удаление топика (в целях предотвращения накрутки)
Есть молодой блог по инвайтам, в который запустили 10 человек.
Эти люди переносят свое творчество.
Ожидается через неделю-другую открыть регистрацию для всех.
И что же увидит молодняк?
Кучу юзеров и тем с 0 рейтингом (мы друг друга знаем и все труды тоже. основное время тратим на перенос, а не на чтение)
Что бы это избежать, было решенно ввести премирование за написание постов.
Начисляется:
+0,01 к рейтингу юзера, опубликовавшего топик
+0,2 к силе юзера, опубликовавшего топик
+ от 0.13 до 1.5 к блогу, в который написал юзер (зависит от его силы)
так же было установлен базовый рейтинг топика — в 1 (хотя его тоже можно менять в зависимости от силы юзера)
ls\classes\actions\ActionTopic.class.php
находим 374 строку и заменяем:
/**
* Теперь можно смело добавлять топик к блогу
*/
$oTopic=new TopicEntity_Topic();
на:
/**
* Теперь можно смело добавлять топик к блогу
*/
/**
* Добавляем силы за пост + чуть рейтинга
*/
$oUser=$this->oUserCurrent;
$iSkillNew=$oUser->getSkill()+0.2;
$iRatingNew=$oUser->getRating()+0.01;
$oUser->setSkill($iSkillNew);
$oUser->setRating($iRatingNew);
$this->User_Update($oUser);
/**
* Добавляем рейтинга в блог
*/
$skill=$iSkillNew;
$iMinSize=0.13;
$iMaxSize=1.5;
$iSizeRange=$iMaxSize-$iMinSize;
$iMinCount=log(0+1);
$iMaxCount=log(500+1);
$iCountRange=$iMaxCount-$iMinCount;
if ($iCountRange==0) {
$iCountRange=1;
}
if ($skill>50 and $skill<200) {
$skill_new=$skill/20;
} elseif ($skill>=200) {
$skill_new=$skill/10;
} else {
$skill_new=$skill/50;
}
$iDelta=$iMinSize+(log($skill_new+1)-$iMinCount)*($iSizeRange/$iCountRange);
$oBlog->setRating($oBlog->getRating()+$iDelta);
$oTopic=new TopicEntity_Topic();
$oTopic->setRating(1); // начальный рейтинг топика = 1.
ls\classes\modules\topic\mapper\Topic.mapper.class.php
25 строка:
public function AddTopic(TopicEntity_Topic $oTopic) {
$sql = "INSERT INTO ".DB_TABLE_TOPIC."
(blog_id,
user_id,
topic_type,
topic_title,
topic_tags,
topic_date_add,
topic_user_ip,
topic_publish,
topic_publish_draft,
topic_publish_index,
topic_cut_text,
topic_forbid_comment,
topic_text_hash
)
VALUES(?d, ?d, ?, ?, ?, ?, ?, ?d, ?d, ?d, ?, ?, ?)
";
if ($iId=$this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getUserId(),$oTopic->getType(),$oTopic->getTitle(),
$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash()))
{
$oTopic->setId($iId);
$this->AddTopicContent($oTopic);
return $iId;
}
return false;
}
заменяем на:
public function AddTopic(TopicEntity_Topic $oTopic) {
$sql = "INSERT INTO ".DB_TABLE_TOPIC."
(blog_id,
user_id,
topic_type,
topic_title,
topic_tags,
topic_date_add,
topic_user_ip,
topic_publish,
topic_publish_draft,
topic_publish_index,
topic_cut_text,
topic_forbid_comment,
topic_text_hash,
topic_rating
)
VALUES(?d, ?d, ?, ?, ?, ?, ?, ?d, ?d, ?d, ?, ?, ?, ?f)
";
if ($iId=$this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getUserId(),$oTopic->getType(),$oTopic->getTitle(),
$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getTextHash(),$oTopic->getRating()))
{
$oTopic->setId($iId);
$this->AddTopicContent($oTopic);
return $iId;
}
return false;
}
ps. Аналогичного успеха с стартовым рейтингом топика можно добится установив default 1 в таблице prefix_topic для поля topic_rating . Здесь же представлена заготовка для более гидкого и динамечиского примеирования нового топика
pss. Аналогично можно реализовать убавление рейтинга при удаление топика (в целях предотвращения накрутки)
5 комментариев
Я поделился своим способом.
Если убрать часть, которая делает новые топики сразу с рейтингом 1 — то нужна всего 1 правка в 1 файле.
И если убрать динамеческое увеличение рейтинга блога, в зависимости от силы пользователя, то правка вобще укладывается в 5 строчек:
на
ИМХО это попроще.
Да и для тех кто начинает изучать движок — хорошая отправная точка.