Добрый день, Гость! Представляем Вам наши форумы. Вы можете зарегистрироваться чтобы писать на форумах или зайдите под своим именем, если Вы уже регистрировались.
   
   


Форум
 CMS Koobi | Основная тема
         Рейтинг как Вконтакте

Похожие темы  |  Печать страницы

Рейтинг как Вконтакте


События Среда, 31.08.2011, 13:22

RASH

Группа: Пользователь
Ранг: Новичок
Cообщений: 51
Регистрация: 05.11.2009
Город: Москва
Здравствуйте, у меня вопрос: как можно организовать на сайте (koobi 6.25) систему рейтинга пользователей, по типу той, что была ВКонтакте (т.е горизонтальная полоса с процентом заполнения профиля) У меня есть два скрипта рейтинга ВК (один из них смарти) и дополнительные поля. Как (примерно) можно это реализовать. Чтобы каждое заполненое поле считалось в процент? Или, например, сделать так, чтобы в зависимости от количества сообщений на форуме.
Например, условие, типа такого (если {$post->poster->user_posts} < 100 тогда (style1) если {$post->poster->user_posts} > 100 тогда (style2)
И допустим ширина тега div (который находиться внутри стиля один) менялся бы по ширине в зависимости от кол-ва сообщений. Те.
<div width="{$post->poster->user_posts}%">{$post->poster->user_posts}</div>
будет ли работать такой медот?

Пользователь офлайн
События Среда, 31.08.2011, 15:01

Status-X

Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Теоретически выглядит так

Исполняемый код

PHP-код
        
$status 
0;

if (!empty(
'проверка значения из базы')) { // если поле заполнено в базе выполяем добавление
    
$status $status 1;
}
// делаешь нужно количество проверок полей, сколько прибавлять если заполнено сам устанавливаешь


// далее например за каждые 100 сообщений даем процент, в переменной $count_posts содержится количество постов пользователя
if ($count_posts 100) {
    
$status $status round($count_posts 100);
}

$status round($status); // округляем до целого числа
$status $status <= 100 $status 100;  // проверяем что число не больше 100
// переменную $status передаешь далее в шаблон, не помню как в шестерке выглядит


Это код для шаблона

Код
<div class="statusbar1">
<div class="statusbar2" style="width:{$status}%"><strong>{$status}%</strong></div>
</div>


Это стили

Код
.statusbar1 {
height:23px;
width:100%;
border:1px solid #665e58
}
.statusbar2 {
height:23px;
background-color:#F00;
text-align:center;
line-height:23px
}


Отредактировано Status-X: 31.08.2011, 15:01:38


Благодарности RASH
Пользователь офлайн
События Среда, 31.08.2011, 21:05

RASH

Автор текущей темы
Группа: Пользователь
Ранг: Новичок
Cообщений: 51
Регистрация: 05.11.2009
Город: Москва
Не могли бы вы показать, как будет выглядеть первый код, на примере таблицы user_skype? Возможно, я что-то не правильно делаю...
Пользователь офлайн
События Среда, 31.08.2011, 22:53

Status-X

Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Цитата
Автор: RASH
Не могли бы вы показать, как будет выглядеть первый код, на примере таблицы user_skype? Возможно, я что-то не правильно делаю...


Ну во первых я не знаю в каком шаблоне ты собираешься выводить, во вторых у меня сейчас нет шестерки под рукой.

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


Пользователь офлайн
События Четверг, 01.09.2011, 00:51

RASH

Автор текущей темы
Группа: Пользователь
Ранг: Новичок
Cообщений: 51
Регистрация: 05.11.2009
Город: Москва
PHP-код
<table width="100%" border="0" cellpadding="2" cellspacing="1" id="personaldata_open" class="container_body">
    <
tr>
    <
td width="180" class="row_first">{$lang.user_name}</td>
    <
td class="row_second">{$row->uname}</td>
  </
tr>
 <
tr>
    <
td width="180" class="row_first">{$lang.user_status}</td>
    <
td class="row_second">{getonlinestatus uname=$row->uname}</td>
  </
tr>
   {if 
$avatar
  <
tr>
    <
td width="180" class="row_first">{$lang.user_avatar}</td>
    <
td class="row_second">{$avatar}</td>
  </
tr>
  {/if}
  <
tr>
    <
td width="180" class="row_first">{$lang.user_rating}</td>
    <
td class="row_second">
    <
div class="statusbar1">
    <
div class="statusbar2" style="width:{$row->user_posts}%"><strong>{$row->user_posts}%</strong></div>
    </
div>
    </
td>
  </
tr>
  {if 
$row->name!=''}
  <
tr>
    <
td width="180" class="row_first">{$lang.user_firstname}</td>
    <
td class="row_second">{$row->name}</td>
  </
tr>
  {/if}

Сначала реализовал так. Работает. Но это вывод количества сообщений на форуме (программа минимум, так сказать)

Далее нужно добавить проверку полей на заполнение (скрипт, который привели Вы)

Вывожу в userdetail.tpl. Насколько я понимаю, код, приведенный вами, нужно было вставить в user.php. и подключить переменную $status
$tmpl->assign('status', $status);
Значения полей, которые необходимо считать (+1 к рейтингу) отсюда changedetail.tpl:

PHP-код
<tr>
      <
td width="200" nowrap="nowrap" class="row_first">{$lang.computer_cpu}</td>
      <
td nowrap="nowrap" class="row_second"><input name="computer_cpu" type="text" id="l_computer_cpu" value="{$user->computer_cpu|default:$smarty.post.computer_cpu|escape:html|sslash}size="40" /></td>
     </
tr>
    <
tr>
      <
td width="200" nowrap="nowrap" class="row_first">{$lang.computer_ram}</td>
      <
td nowrap="nowrap" class="row_second"><input name="computer_ram" type="text" id="l_computer_ram" value="{$user->computer_ram|default:$smarty.post.computer_ram|escape:html|sslash}size="40" /></td>
    </
tr>
    
    <
tr>
      <
td width="200" nowrap="nowrap" class="row_first">{$lang.computer_video}</td>
      <
td nowrap="nowrap" class="row_second"><input name="computer_video" type="text" id="l_computer_video" value="{$user->computer_video|default:$smarty.post.computer_video|escape:html|sslash}size="40" /></td>
    </
tr>
     <
tr>
      <
td width="200" nowrap="nowrap" class="row_first">{$lang.computer_motherboard}</td>
      <
td nowrap="nowrap" class="row_second"><input name="computer_motherboard" type="text" id="l_computer_motherboard" value="{$user->computer_motherboard|default:$smarty.post.computer_motherboard|escape:html|sslash}size="40" /></td>
    </
tr>


Т.е computer_cpu это название строки в базе *_user
Вывод переменной в userdetail.tpl:
{$row->computer_cpu}

Добавлено RASH: 01.09.2011, 00:51:57
user.php
PHP-код
if(!defined("BASEDIR")) exit;
if(!
checkactive('user')) include(dirname(__FILE__)."/lib/notactive.php" );

$sname simpletitle($lang['title_userdetails']);

if (!
permission('showuserpage')) 
{
    
$EOUT stderror("nopermission"$lang['nopermission_t'], str_replace("__URL__""/index.php"$lang['redirect']), "/index.php"1);
    
$error 1;
    
$NOOUT 1;
}

$sql $db->Query("SELECT * FROM ".PREFIX."_user WHERE uid = '".escs($_REQUEST['id'])."' AND user_regdate > 1");
$row $sql->fetchrow();

if(
$row->uid == ''){
 
$EOUT msg("error_once","error_usernotindb"str_replace("__URL__""/index.php?p=userlist&area=$_REQUEST[area]"$lang['redirect']), "/index.php?p=userlist&area=$_REQUEST[area]") ; 
 
$NOOUT 1;
}

if(
$row->show_public == 2){
 
$EOUT msg("error_once","shop_userprofile_notpublic"str_replace("__URL__""/index.php?p=userlist&area=$_REQUEST[area]"$lang['redirect']), "/index.php?p=userlist&area=$_REQUEST[area]") ; 
 
$NOOUT 1;
}

// 
if($row->user_viewemail=="yes"){$usermail '<a href="javascript:popex(\'index.php?p=misc&do=EMAIL&uid='.$row->uid.'\',\'\',\'450\',\'300\',\'1\',\'1\',\'0\',\'0\');"><img border="0" src="templates/'.$THEME.'/img/buttons/email.gif" alt=\"\" /></a>';}

$row->usergroup fetchgroupname($row->ugroup);
$row->ctime mygmt($row->user_regdate);

$status 0

if (!empty(
$_REQUEST['computer_cpu'])) { // если поле заполнено в базе выполяем добавление 
    
$status $status 1

if (!empty(
$_REQUEST['computer_ram'])) { // если поле заполнено в базе выполяем добавление 
    
$status $status 1

if (!empty(
$_REQUEST['computer_video'])) { // если поле заполнено в базе выполяем добавление 
    
$status $status 1

// делаешь нужно количество проверок полей, сколько прибавлять если заполнено сам устанавливаешь 


// далее например за каждые 100 сообщений даем процент, в переменной $count_posts содержится количество постов пользователя 
if ($count_posts 100) { 
    
$status $status round($count_posts 100); 


$status round($status); // округляем до целого числа 
$status $status <= 100 $status 100;  // проверяем что число не больше 100 
// переменную $status передаешь далее в шаблон, не помню как в шестерке выглядит 



// 
$signatur = (BBCODESITE==1) ? kcodes($row->user_sig) : nl2br($row->user_sig);
$signatur = (SMILIES == 1) ? dosmilies($signatur) : $signatur;

$interests = (BBCODESITE==1) ? kcodes($row->user_interests) : nl2br($row->user_interests);
$interests = (SMILIES == 1) ? dosmilies($interests) : $interests;

$tmpl->register_function('getonlinestatus''getonlinestatus');
$tmpl->assign('signatur'$signatur);
$tmpl->assign('posts'numposts(escs($_REQUEST['id'])));
$tmpl->assign('interests'$interests);
$tmpl->assign('avatar'getAvatar($row->ugroup,$row->user_avatar,$row->usedefault_avatar,$row->ugroup));
$tmpl->assign('pncode'urlencode($row->uname));
$tmpl->assign('row'$row);
$tmpl->assign('lang'$lang);
$tmpl->assign('status'$status);
$tmpl->assign('content'parsetrue('container/'.container('userlist'), $lang['title_userdetails'], $tmpl->fetch('user/userdetail.tpl')));


userdetail.tpl
PHP-код

<tr
    <
td width="180" class="row_first">{$lang.user_rating}</td
    <
td class="row_second"
    <
div class="statusbar1"
    <
div class="statusbar2" style="width:{$status}%"><strong>{$status}%</strong></div
    </
div
    </
td>  
</
tr>

Пользователь офлайн
События Четверг, 01.09.2011, 01:17

Status-X

Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Читай в коде

PHP-код
if(!defined("BASEDIR")) exit; 
if(!
checkactive('user')) include(dirname(__FILE__)."/lib/notactive.php" ); 

$sname simpletitle($lang['title_userdetails']); 

if (!
permission('showuserpage'))  

    
$EOUT stderror("nopermission"$lang['nopermission_t'], str_replace("__URL__""/index.php"$lang['redirect']), "/index.php"1); 
    
$error 1
    
$NOOUT 1


$sql $db->Query("SELECT * FROM ".PREFIX."_user WHERE uid = '".escs($_REQUEST['id'])."' AND user_regdate > 1"); 
$row $sql->fetchrow(); 

if(
$row->uid == ''){ 
 
$EOUT msg("error_once","error_usernotindb"str_replace("__URL__""/index.php?p=userlist&area=$_REQUEST[area]"$lang['redirect']), "/index.php?p=userlist&area=$_REQUEST[area]") ;  
 
$NOOUT 1


if(
$row->show_public == 2){ 
 
$EOUT msg("error_once","shop_userprofile_notpublic"str_replace("__URL__""/index.php?p=userlist&area=$_REQUEST[area]"$lang['redirect']), "/index.php?p=userlist&area=$_REQUEST[area]") ;  
 
$NOOUT 1


//  
if($row->user_viewemail=="yes"){$usermail '<a href="javascript:popex('index.php?p=misc&do=EMAIL&uid='.$row->uid.'','','450','300','1','1','0','0');"><img border="0" src="templates/'.$THEME.'/img/buttons/email.gif" alt="" /></a>';} 

$row->usergroup fetchgroupname($row->ugroup); 
$row->ctime mygmt($row->user_regdate); 

$status 0;  

if (!empty(
$row->user_sig)) { // Если заполнено поле подпись то плюс 1 процент
    
$status $status 1;  
}  
if (!empty(
$row->user_interests)) { // Если заполнено поле интересы то плюс 1 процент 
    
$status $status 1;  
}  
if (!empty(
$row->user_avatar)) { // Если установлен свой аватар то плюс 2 процента
    
$status $status 2;  
}  
// Поля которые выше есть точно в базе судя по коду, про поля ниже не уверен , тупо идешь в базу и смотришь есть ли такое поле как computer_cpu и ниже


if (!empty($row->computer_cpu)) { // если поле заполнено в базе выполяем добавление  
    
$status $status 1;  
}  
if (!empty(
$row->computer_ram)) { // если поле заполнено в базе выполяем добавление  
    
$status $status 1;  
}  
if (!empty(
$row->computer_video)) { // если поле заполнено в базе выполяем добавление  
    
$status $status 1;  
}  
// делаешь нужно количество проверок полей, сколько прибавлять если заполнено сам устанавливаешь  


// user_posts вроде как должно быть и хранит количество сообщение на форуме
if ($row->user_posts 100) {  
    
$status $status round($row->user_posts 100);  
}  

$status round($status); // округляем до целого числа  
$status $status <= 100 $status 100;  // проверяем что число не больше 100  

$signatur = (BBCODESITE==1) ? kcodes($row->user_sig) : nl2br($row->user_sig); 
$signatur = (SMILIES == 1) ? dosmilies($signatur) : $signatur

$interests = (BBCODESITE==1) ? kcodes($row->user_interests) : nl2br($row->user_interests); 
$interests = (SMILIES == 1) ? dosmilies($interests) : $interests

$tmpl->register_function('getonlinestatus''getonlinestatus'); 
$tmpl->assign('signatur'$signatur); 
$tmpl->assign('posts'numposts(escs($_REQUEST['id']))); 
$tmpl->assign('interests'$interests); 
$tmpl->assign('avatar'getAvatar($row->ugroup,$row->user_avatar,$row->usedefault_avatar,$row->ugroup)); 
$tmpl->assign('pncode'urlencode($row->uname)); 
$tmpl->assign('row'$row); 
$tmpl->assign('lang'$lang); 
$tmpl->assign('status'$status); 
$tmpl->assign('content'parsetrue('container/'.container('userlist'), $lang['title_userdetails'], $tmpl->fetch('user/userdetail.tpl'))); 



Благодарности RASH
Пользователь офлайн
События Четверг, 01.09.2011, 20:29

RASH

Автор текущей темы
Группа: Пользователь
Ранг: Новичок
Cообщений: 51
Регистрация: 05.11.2009
Город: Москва
Еще один вопрос:
Попытался сделать так, чтобы при нажатии на рейтинг другого пользователя у пользователя (владельца рейтинга) забирали одно цифровое значение из поля user_points (-1) и прибавляли пользователю user_rate (+1) никак не могу найти нормальную ссылку с доступным описанием, как работает эта функция. Так вот суть вопроса: Как сделать так, чтобы при нажатии на ссылку, у пользователя (владельца) забирали из базы одно значение (-1) и отдавали этот голос тому, за кого проголосовали? Допустим, прямой запрос в mysql таблицу *_user и в поле user_points и user_rate.

попробывал дописать вашу функцию и после зачисления процента за посты на форуме добавил вот это:
PHP-код
if($status == "vote") {
$sql $db->Query("UPDATE ".PREFIX."_user SET user_points = user_points + 1 WHERE uid = ".$user->user_points[id]."");
$sql $db->Query("UPDATE ".PREFIX."_user SET user_rate  = user_rate - 1 WHERE uid = ".$row->user_rate[id]."");
}


Но, естественно, как всегда у меня ничего не работает... Может быть есть прямо запрос в базу, который можно реализовать через ссылку?
Действия следующие:
- [=====50%====] +
"+" = +1
"-" = -1
или
+1 = 51% и -1 из количества points.
Пожалуйста, помогите...

Отредактировано RASH: 01.09.2011, 20:54:06
Пользователь офлайн
События Четверг, 01.09.2011, 21:32

Status-X

Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
После WHERE нужно корректные идентификаторы пользователей использовать и будет работать


Пользователь офлайн
События Четверг, 01.09.2011, 22:09

RASH

Автор текущей темы
Группа: Пользователь
Ранг: Новичок
Cообщений: 51
Регистрация: 05.11.2009
Город: Москва
По типу того, что есть в user.php
PHP-код
WHERE uid '".escs($_REQUEST['id'])."'

Только они тоже не работают
или
PHP-код
uid '$user_id'";


Отредактировано RASH: 01.09.2011, 23:58:57
Пользователь офлайн


Похожие темы  |  Печать страницы  |   Предыдущая тема  |   Следующая тема

Быстрый переход:  
 

 Сейчас на сайте


Пользователей: 0, Гостей: 4

Поисковые боты: 10
Inktomi Slurp, BingBot(4), Baidu.com(2), oBot, Unknown Bot(2)

 Статистика форума


  Темы Сообщения Пользователи
За сутки:
За неделю:
За месяц:
Всего:
Мы приветствуем нового участника: Lesya

 Дни рождения


fix (26)
Печать | Copyright © 2009 - 2016 Status-X All rights reserved | Powered by CMS Status-X 1.05 | Контакты