Поиск по сайту
Вход на сайт
Обратите внимание
Топ-новости
Архив сайта
Апрель 2016 (1)
Апрель 2014 (1)
Ноябрь 2013 (1)
Октябрь 2013 (1)
Май 2013 (2)
Апрель 2013 (8)
Партнеры

seo-monster.ru - сервис проверки доменов
хочешь такой же информер? Информер ТИЦ и PR

» » Счетчик комментариев+ранг пользователей v.1.5

Счетчик комментариев+ранг пользователей v.1.5

Хаки

С помощью этого хака можно добавить количество комментариев каждого зарегестрированного пользователя.
Пример смотрите на сайте почти в каждой статье.

Тестировалось на Datalife Engine 5.1-5.3
Автор: Лысак Владимир(dle.net.ua)

Приступим!
1. Правим шаблон comments.tpl.
Нужно добавить два кода. Это код для количества комментариев и сама картинка(полоса) рейтинга.
К примеру так:


<img src="{foto}" border="0" /><br />
{rank_txt}<br />
<img src=/templates/rus/images/comments.gif border="0" alt="Комментариев" />{comm_num}<br />
<img src="{image_rating}" border="0" alt="Рейтинг" />

Я добавил эти поля под фото.

2. Файл show.full.php
Заменить

    $sql_result = $db->query("SELECT " . PREFIX . "_comments.id, post_id, " . PREFIX . "_comments.user_id, date, autor as gast_name, " . PREFIX . "_comments.email as gast_email, text, ip, is_register, name, " . PREFIX . "_users.email, reg_date, signature, foto, fullname, land, icq, xfields FROM " . PREFIX . "_comments LEFT JOIN " . PREFIX . "_users ON " . PREFIX . "_comments.user_id=" . PREFIX . "_users.user_id WHERE " . PREFIX . "_comments.post_id = '$news_id' order by date ".$config['comm_msort']." LIMIT ".$cstart.",".$config['comm_nummers']);

на (для 5.1, а может и 5.2)

    $sql_result = $db->query("SELECT " . PREFIX . "_comments.id, post_id, " . PREFIX . "_comments.user_id, date, autor as gast_name, " . PREFIX . "_comments.email as gast_email, text, ip, is_register, name, " . PREFIX . "_users.email, user_group, reg_date, signature, foto, fullname, land, icq,comm_num, xfields FROM " . PREFIX . "_comments LEFT JOIN " . PREFIX . "_users ON " . PREFIX . "_comments.user_id=" . PREFIX . "_users.user_id WHERE " . PREFIX . "_comments.post_id = '$news_id' order by date ".$config['comm_msort']." LIMIT ".$cstart.",".$config['comm_nummers']);

на (для 5.3)

$sql_result = $db->query("SELECT " . PREFIX . "_comments.id, post_id, " . PREFIX . "_comments.user_id, date, autor as gast_name, " . PREFIX . "_comments.email as gast_email, text, ip, user_group, comm_num, is_register, name, " . PREFIX . "_users.email,  user_group, reg_date, signature, foto, fullname, land, icq, xfields FROM " . PREFIX . "_comments LEFT JOIN " . PREFIX . "_users ON " . PREFIX . "_comments.user_id=" . PREFIX . "_users.user_id WHERE " . PREFIX . "_comments.post_id = '$news_id' order by date ".$config['comm_msort']." LIMIT ".$cstart.",".$config['comm_nummers']);




Далее после

    if ($row['is_register'] AND $row['signature']) {
    $tpl->set_block("'\\[signature\\](.*?)\\[/signature\\]'si","\\1");
    $tpl->set('{signature}', stripslashes($row['signature']));
    } else {
    $tpl->set_block("'\\[signature\\](.*?)\\[/signature\\]'si","");
    }

дописываем

$no_rating = " Гости не учавствуют в рейтинге";
$arr_ratings = array(
0=> array(
'image_rating'=>'http://www.dle.net.ua/templates/rus/images/rank_00.png',
'rank_txt'=>'Прохожий',
'count_comm'=>'0'
),

1=> array(
'image_rating'=>'http://www.dle.net.ua/templates/rus/images/rank_01.png',
'rank_txt'=>'Гость',
'count_comm'=>'1'
),
2=> array(
'image_rating'=>'http://www.dle.net.ua/templates/rus/images/rank_02.png',
'rank_txt'=>'Новичок',
'count_comm'=>'10'
),
3=> array(
'image_rating'=>'http://www.dle.net.ua/templates/rus/images/rank_03.png',
'rank_txt'=>'Опытный',
'count_comm'=>'20'
),
4=> array(
'image_rating'=>'http://www.dle.net.ua/templates/rus/images/rank_04png',
'rank_txt'=>'Шаман',
'count_comm'=>'30'
),
5=> array(
'image_rating'=>'http://www.dle.net.ua/templates/rus/images/rank_05.png',
'rank_txt'=>'Гуру',
'count_comm'=>'40'
),
);
if ($row['comm_num']==""){$row[comm_num]=0;}
for($j=0;$j<=count($arr_ratings)-1;$j++)
{
  if ($row['comm_num']>=$arr_ratings[$j]['count_comm'])
  {
    $image_rating = $arr_ratings[$j]['image_rating'];
    $rank_txt = $arr_ratings[$j]['rank_txt'];
    $remain_comm = "До следующего звания Вам ".($arr_ratings[$j+1]['count_comm']-$row['comm_num'])." комментариев";
    if ($row['comm_num']==0){$remain_comm = $no_rating;}
  }
}
if ($row['user_group']==1)
{
  $rank_txt = "<b>Администратор</b>";
  $remain_comm = "";
}

$tpl->set('{image_rating}',$image_rating);
$tpl->set('{rank_txt}',$rank_txt);
$rank_txt = "";
$image_rating = "";

if ($row['comm_num']>0){
$tpl->set('{comm_num}',$row['comm_num']);
}
else
$tpl->set('{comm_num}','-');
$tpl->set('{img_rating_alt}',$remain_comm);


Аналогичные действия проводим с файлом ajax/addcomments.php

Не забудьте изменить пути к картинкам ну и загрузить, конечно, их на сервер! smile

3. Проверяем работу!
Результат работы вы можете видеть например тут счётчик комментариев

Удачи! wink

У вас не ставится dle модуль или dle шаблон работает не правильно? Задайте вопрос на нашем форуме по DLE(Datalife Engine CMS) и Вам обязательно помогут!



Если появились вопросы по поводу Счетчик комментариев+ранг пользователей v.1.5 или Вы хотите высказаться, то пройдите регистрацию или авторизируйтесь и оставляйте комментарии.
#1 написал: slayer (3 февраля 2007 21:05)

Публикаций: 0
Комментариев: 0
vladimir:

для 5.3 нужно еще в ajax/addcomments.php изменить
$row = $db->super_query("SELECT " . PREFIX . "_comments.id, post_id, " . PREFIX . "_comments.user_id, date, autor as gast_name, " . PREFIX . "_comments.email as gast_email, text, ip, is_register, name, " . PREFIX . "_users.email, reg_date, signature, foto, fullname, land, icq, xfields FROM " . PREFIX . "_comments LEFT JOIN " . PREFIX . "_users ON " . PREFIX . "_comments.user_id=" . PREFIX . "_users.user_id WHERE " . PREFIX . "_comments.post_id = '$post_id' order by id DESC LIMIT 0,1");


на

$row = $db->super_query("SELECT " . PREFIX . "_comments.id, post_id, " . PREFIX . "_comments.user_id, date, autor as gast_name, " . PREFIX . "_comments.email as gast_email, text, ip, is_register, name, " . PREFIX . "_users.email, news_num, " . PREFIX . "_users.comm_num, " . PREFIX . "_users.user_group, reg_date, signature, foto, fullname, land, icq, xfields FROM " . PREFIX . "_comments LEFT JOIN " . PREFIX . "_users ON " . PREFIX . "_comments.user_id=" . PREFIX . "_users.user_id WHERE " . PREFIX . "_comments.post_id = '$post_id' order by id DESC LIMIT 0,1");


проверено 100 percent working tongue



#2 написал: vladimir (4 февраля 2007 01:19)

Публикаций: 263
Комментариев: 754
slayer,
Не только для 5,3. Для всех)
#3 написал: slayer (4 февраля 2007 14:16)

Публикаций: 0
Комментариев: 0
в общем там оказалось, что в ajax мало этого было дописать crying - в общем вот сборка, для 100 % работы в 5.3 (просто заменяем файлы)
Внимание! У Вас нет прав для просмотра скрытого текста.
#4 написал: vladimir (4 февраля 2007 15:50)

Публикаций: 263
Комментариев: 754
slayer,
Вложил бы в архив и остальные файлы. А то не полный хак выходит :)
#5 написал: vladimir (4 февраля 2007 15:50)

Публикаций: 263
Комментариев: 754
slayer,
Вложил бы в архив и остальные файлы. А то не полный хак выходит :)
#6 написал: slayer (4 февраля 2007 22:10)

Публикаций: 0
Комментариев: 0
точно забыл show.full.php положить, сейчас добавлю wink
#7 написал: slayer (5 февраля 2007 08:29)

Публикаций: 0
Комментариев: 0
вот полный хак
Внимание! У Вас нет прав для просмотра скрытого текста.
#8 написал: eagle35 (5 февраля 2007 17:55)

Публикаций: 0
Комментариев: 0
The additional fields under the avatar are not seen in "lastcomments" section, when you go there following the "Last Comments" link in "My Profile" section.
#9 написал: slayer (5 февраля 2007 19:46)

Публикаций: 0
Комментариев: 0
eagle35, у меня на локале пашет везде
#10 написал: eagle35 (6 февраля 2007 02:20)

Публикаций: 0
Комментариев: 0
slayer, thank you very much. wink
I haven't seen the code you gave above, when I wrote my earlier comment.
I tried your code and it works fine in DLE 5.3 smile
I distribute it on my site as free with all references. If you want to have a look at my site, here is the address: www.dleturkiye.com
If you don't want me to distribute your code, please send me a message and I'll clear it from my site. Thanks again for the good job.
#11 написал: domovoi (9 февраля 2007 00:26)

Публикаций: 0
Комментариев: 0
Спасибо за хак. wink
Есть один баг: если оставивший комментарий не зарегистрирован на сайте, то, вместо картинки рейтинга, получается дырка и портится вид страницы
#12 написал: vladimir (9 февраля 2007 08:42)

Публикаций: 263
Комментариев: 754
domovoi,
Интересный баг...
Сам использую показанный выше алгоритм, но такого не замечал.
#13 написал: domovoi (9 февраля 2007 11:50)

Публикаций: 0
Комментариев: 0
Цитата: vladimir
Сам использую показанный выше алгоритм, но такого не замечал.

Это из-за того, что скрипт не проверяет зарегистрирован или нет тот, кто осталвяет комментарий
Пришлось самому чуть-чуть изменять код
$arr_ratings = array(
'/templates/rus/images/rank_00.png'=>'0',
'/templates/rus/images/rank_01.png'=>'4',
'/templates/rus/images/rank_02.png'=>'8',
'/templates/rus/images/rank_03.png'=>'25',
'/templates/rus/images/rank_04.png'=>'50',
'/templates/rus/images/rank_05.png'=>'100',
);
$image_rating = $arr_rating[0];
foreach($arr_ratings as $key=>$value)
{
if ($row['comm_num']>=$value){$image_rating = $key;}
}
if (!isset($image_rating)){$image_rating = $arr_ratings[0];}
$tpl->set('{image_rating}',$image_rating);


вот на это
$arr_ratings = array(
'/templates/rus/images/rank_00.png'=>'0',
'/templates/rus/images/rank_01.png'=>'4',
'/templates/rus/images/rank_02.png'=>'8',
'/templates/rus/images/rank_03.png'=>'25',
'/templates/rus/images/rank_04.png'=>'50',
'/templates/rus/images/rank_05.png'=>'100',
);
$image_rating = $arr_rating[0];
foreach($arr_ratings as $key=>$value)
{
if ($row['comm_num']>=$value){$image_rating = $key;}
}
if (!isset($image_rating)){$image_rating = $arr_ratings[0];}
if ($row['is_register'])
$tpl->set('{image_rating}',$image_rating);
else
$tpl->set('{image_rating}','/templates/rus/images/rank_00.png');



Хотя может у меня руки кривые и в ПХП почти не шарю
#14 написал: vladimir (9 февраля 2007 15:41)

Публикаций: 263
Комментариев: 754
domovoi,
Владеешь и очень хорошо. Просто я допустил ошибку.


if (!isset($image_rating)){$image_rating = $arr_ratings[0];}


Доступ к массиву таким образом не может быть допущен... smile
#15 написал: domovoi (10 февраля 2007 12:35)

Публикаций: 0
Комментариев: 0
Цитата: vladimir
Владеешь и очень хорошо. Просто я допустил ошибку.

На самом деле, мозгов хватает только на ковыряние чужих скриптов smile

vladimir, ты скажи я правильно сделал или лучше сделать как-нибудь иначе?
#16 написал: skamer (12 февраля 2007 11:09)

Публикаций: 0
Комментариев: 0
А как сделать чтобы еще и рейтинг отображался типа новичок, гость, опытный итд? (как тут) заранее спасибо!
#17 написал: skamer (12 февраля 2007 11:24)

Публикаций: 0
Комментариев: 0
ой сори.. Я же вспомнил что я программирование учил раньше...

Добавил код в Show.full.php
$arr_ratings_text = array(
$arr_ratings_text = array(
'Гость'=>'0',// Здесь все понятно т.к объяснили выше
'Новичок'=>'5',
'Пользователь'=>'10',
'Продвинутый пользователь'=>'25',
'Общительный'=>'50',
'Комментатор'=>'75',
'Активист'=>'100',
'Super-Активист'=>'200',
'Мудрец'=>'300',
'Хранитель сайта'=>'500',
'Бог'=>'1000',
);
$text_rating = $arr_ratings_text[0];
foreach($arr_ratings_text as $key=>$value)
{
if ($row['comm_num']>=$value){$text_rating = $key;}
}
if (!isset($text_rating)){$text_rating = $arr_ratings_text[0];}
$tpl->set('{text_rating}',$text_rating);
if ($row['comm_num']>0){
$tpl->set('{comm_num}',$row['comm_num']);
}
else
$tpl->set('{comm_num}','-');

// конец добавления от текстового рейтинга
$image_rating = $arr_rating[0];
foreach($arr_ratings as $key=>$value)
{
if ($row['comm_num']>=$value){$image_rating = $key;}
}
if (!isset($image_rating)){$image_rating = $arr_ratings[0];}
$tpl->set('{image_rating}',$image_rating);
if ($row['comm_num']>0){
$tpl->set('{comm_num}',$row['comm_num']);
}
else
$tpl->set('{comm_num}','-');
// конец модуля


Все работает, единственное что хочу чтобы посоветовали, чтобы оптимизировать мое добавление, возможно использую разные переменные а можно было одну итд, чтобы была оптимизация кода.
#18 написал: vladimir (12 февраля 2007 11:30)

Публикаций: 263
Комментариев: 754
skamer,
честно, пытался и не понял что ты делал там...
Вот как я сделал на этом сайте звания для пользователей:

$no_rating = " Гости не учавствуют в рейтинге";
$arr_ratings = array(
0=> array(
'image_rating'=>'/templates/rus/images/rank_00.png',
'rank_txt'=>'Прохожий',
'count_comm'=>'0'
),

1=> array(
'image_rating'=>'/templates/rus/images/rank_01.png',
'rank_txt'=>'Гость',
'count_comm'=>'1'
),
2=> array(
'image_rating'=>'/templates/rus/images/rank_02.png',
'rank_txt'=>'Новичок',
'count_comm'=>'10'
),
3=> array(
'image_rating'=>'/templates/rus/images/rank_03.png',
'rank_txt'=>'Опытный',
'count_comm'=>'20'
),
4=> array(
'image_rating'=>'/templates/rus/images/rank_04png',
'rank_txt'=>'Шаман',
'count_comm'=>'30'
),
5=> array(
'image_rating'=>'/templates/rus/images/rank_05.png',
'rank_txt'=>'Гуру',
'count_comm'=>'40'
),
);
if ($row['comm_num']==""){$row[comm_num]=0;}
for($i=0;$i<=count($arr_ratings)-1;$i++)
{
if ($row['comm_num']>=$arr_ratings[$i]['count_comm'])
{
$image_rating = $arr_ratings[$i]['image_rating'];
$rank_txt = $arr_ratings[$i]['rank_txt'];
$remain_comm = "До следующего звания Вам ".($arr_ratings[$i+1]['count_comm']-$row['comm_num'])." комментариев";
if ($row['comm_num']==0){$remain_comm = $no_rating;}
}
}
$tpl->set('{image_rating}',$image_rating);
$tpl->set('{rank_txt}',$rank_txt);
$rank_txt = "";
$image_rating = "";

if ($row['comm_num']>0){
$tpl->set('{comm_num}',$row['comm_num']);
}
else
$tpl->set('{comm_num}','-');
$tpl->set('{img_rating_alt}',$remain_comm);



Для работы вам нужно ещё добавить {rank_txt} и будет выводиться звание учасников сайта...)

Полузуйтесь наздоровье!)
#19 написал: Worm (13 февраля 2007 12:57)

Публикаций: 0
Комментариев: 0
cделайте норм новую версию!
а то пока собрал все по частям чуть не кончил..то одно не пашет то другое.... бррр
#20 написал: MadRush (16 февраля 2007 12:54)

Публикаций: 0
Комментариев: 0
Цитата: Worm
cделайте норм новую версию!
а то пока собрал все по частям чуть не кончил..то одно не пашет то другое.... бррр


Это точно! wink
#21 написал: jox666 (16 февраля 2007 13:23)

Публикаций: 0
Комментариев: 0
Поддерживаю! Выложите плиз уже полностью сформированную версию.... а то я начал в ручную, смотрю готовое, качгнул. оказывается недоработанное опять качнул дальше вы пишете об ошибках.... короче голова закружилась так толком ничо и не сделал
#22 написал: MadRush (16 февраля 2007 14:53)

Публикаций: 0
Комментариев: 0
jox666, Я почти сделал. Скоро дам ссылочку. smile
#23 написал: Relizer (17 февраля 2007 00:59)

Публикаций: 0
Комментариев: 0
Так чё ктонить сделает всё норм или нет?
#24 написал: 90 (17 февраля 2007 04:56)

Публикаций: 0
Комментариев: 0
бля, сделайте вы нормальную версию, а то себе поставили и довольны, остальные как хотите.
#25 написал: eagle35 (18 февраля 2007 22:30)

Публикаций: 0
Комментариев: 0
vladimir,
There is a mistake in this module.
All the id numbers of the comments are same. Look at the id numbers of the comments here above.
They're also the same (#7)
#26 написал: domeni (19 февраля 2007 00:54)

Публикаций: 0
Комментариев: 0
спасибо, проставил wink
#27 написал: vladimir (19 февраля 2007 02:17)

Публикаций: 263
Комментариев: 754
eagle35,
Thx! I don`t see it earlier. wink

Код исправлен.
#28 написал: eagle35 (19 февраля 2007 12:40)

Публикаций: 0
Комментариев: 0
vladimir,
How can we indicate the rank "administrator" regardless of the comment number?
I mean, although you're the administrator of this site, your rank is "Опытный". But how can we change this rank to "администратор" for the admin of the site regardless of his/her comment number?
#29 написал: Mr. Zorg (19 февраля 2007 14:03)

Публикаций: 0
Комментариев: 0
Цитата: vladimir
Код исправлен.

А можно как нибудь в комменты запостить что на что менять в коде надо, чтобы исправить баг с номерами комментариев?
#30 написал: vladimir (19 февраля 2007 15:55)

Публикаций: 263
Комментариев: 754
Mr. Zorg,
В том большом куске кода я заменил вот это:

for($j=0;$j<=count($arr_ratings)-1;$j++)
{
if ($row['comm_num']>=$arr_ratings[$j]['count_comm'])
{
$image_rating = $arr_ratings[$j]['image_rating'];
$rank_txt = $arr_ratings[$j]['rank_txt'];
$remain_comm = "До следующего звания Вам ".($arr_ratings[$j+1]['count_comm']-$row['comm_num'])." комментариев";
if ($row['comm_num']==0){$remain_comm = $no_rating;}
}
}
Вернуться назад << 1 2 >> Следующая страница
Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Вверх