Сделал custom block со следующим кодом:
<?
$time_period = variable_get('user_block_seconds_online', 600);
$users = db_query('select {users}.name, {sessions}.uid, {sessions}.hostname from {users} left join {sessions} on {users}.uid={sessions}.uid where {sessions}.timestamp > unix_timestamp()-%d order by {sessions}.timestamp desc', $time_period);
?>
<div class="content">
<div class="item-list">
<ul>
<?
$num_guest = 0;
$num_users = 0;
while( $users2 = db_fetch_array($users) ) {
if( $users2['uid']==0 ) {
$num_guest++;
?>
<li><a style="font-size: 75%" title="<?=$users2['hostname']?>" href="http://whois.domaintools.com/<?=$users2['hostname']?>"><?=$users2['hostname']?></a></li>
<?
} else {
$num_users++;
?>
<li class="block-user-3"><a title="View user profile." href="/users/<?=$users2['name']?>"><?=$users2['name']?></a></li>
<?
}
}
?>
</ul>
</div>
There are <em><?=$num_users?> user<?=($num_users>1)?'s':''?></em> and <em><?=$num_guest?> guest<?=($num_guest>1)?'s':''?></em> online.
</div>
</div>
Теперь зарегистрированные пользователи отображаются, как обычно, а для гостей вместо безликого "and 6 guests" отображаются их IP адреса
Если кого заинтересовало, как это выглядит - можно посмотреть на сайте http://lbn.kiev.ua внизу, в левой колонке.
PS: конечно, было бы очень приятно опознать и подписать ботов, но пока до этого не дошел
Комментарии
А вы не думаете, что некоторым пользователям не хочется чтобы их таким образом определяли, "анонимность" так сказать?
а пользователи и сохраняют анонимность
IP показывается только для незарегистрированных посетителей
респект, очень полезная штука!
к PS
еще бы прикрутить что-то вроде ip2country, чтобы показать флаги страны посетителя , хотя может и лишнее
Да и ссылки на домаинтуллс по мне не стоит показывать гостям, им лучше отдавать без ссылок, а то получается бесплатная реклама для domaintools в глазах поисковиков
прикрутил
ссылку на domaintools... возможно, и правда спрячу - надо просто проверку ролей прикрутить, покопаться в документации, как это делается
ниже код с флагами, использует ip2cc модуль (плюс некоторые мелкие правки):
<?
$time_period = variable_get('user_block_seconds_online', 600);
$users = db_query('select {users}.name, {sessions}.uid, {sessions}.hostname from {users} left join {sessions} on {users}.uid={sessions}.uid where {sessions}.timestamp > unix_timestamp()-%d order by {sessions}.timestamp desc', $time_period);
?>
<div class="content">
<div class="item-list">
<?
$num_guest = 0;
$num_users = 0;
while( $users2 = db_fetch_array($users) ) {
$output = theme_ip2cc_ip_flag($users2['hostname']);
if( $users2['uid']==0 ) {
$num_guest++;
?>
<?=$output?> <a style="font-size: 75%" title="<?=$users2['hostname']?>" href="http://whois.domaintools.com/<?=$users2['hostname']?>"><?=$users2['hostname']?></a><br />
<?
} else {
$num_users++;
?>
<?=$output?> <a title="View user profile." href="/users/<?=$users2['name']?>"><?=$users2['name']?></a><br />
<?
}
}
?>
</div>
There are <em><?=$num_users?> user<?=($num_users==1)?'':'s'?></em> and <em><?=$num_guest?> guest<?=($num_guest==1)?'':'s'?></em> online.
</div>
</div>
Че-то не работает не первый ни второй примеры...
Создаю блок, указываю формат ввода PHP, в результате вылезают куски кода...
Спасибо наглядный и удобный получается блок.
Оба кода рабочие, вставлять надо в формате php и в режиме источник.
Единственно , что не работает- это просмотр профиля пользователя, так как вызов и идентификация происходит по имени а не по коду, подправьте если не трудно.
первая работает а вот вторая ошибку выдает
Разобрался. Упорно отказывались работать на локалхосте, на рабочем сайте всё нормуль.
Просто и удобно. Спасибо.
Для тех кто еще решил вопользоватся: Ссылку на профиль поправьте так:
...
$users = db_query('select {users}.uid, {users}.name, {sessions}.uid, {sessions}.hostname from {users} left join {sessions} on {users}.uid={sessions}.uid where {sessions}.timestamp > unix_timestamp()-%d order by {sessions}.timestamp desc', $time_period);
?>
...
в запрос добавляем {users}.uid
...
<?=$output?> <а title="View user profile." href="/users/<?=$users2['uid']?>"><?=$users2['name']?>
...
и имя меняем на id пользователя
Что меняем выделено жирным
Немного переделал блок теперь показывает гостей и некоторые поисковые боты
<?php
<div id="block-user-3" class="block block-user">
<?
$time_period = variable_get('user_block_seconds_online', 600);
$users = db_query('select {users}.name, {sessions}.uid, {sessions}.hostname from {users} left join {sessions} on {users}.uid={sessions}.uid where {sessions}.timestamp > unix_timestamp()-%d order by {sessions}.timestamp desc', $time_period);
?>
<div class="content">
<div class="item-list">
<ul>
<?
$num_guest = 0;
$num_users = 0;
while( $users2 = db_fetch_array($users) ) {
if( $users2['uid']==0 ) {
$num_guest++;
?>
<li><a style="font-size: 75%" title="<?=$users2['hostname']?>" href="http://whois.domaintools.com/<?=$users2['hostname']?>">
<?
if (strpos(gethostbyaddr($users2['hostname']),"googlebot")!== false) {
echo "Google бот";
} elseif (strpos(gethostbyaddr($users2['hostname']),"yandex")!== false) {
echo "Yandex бот";
} elseif (strpos(gethostbyaddr($users2['hostname']),"StackRambler")!== false) {
echo "Rambler бот";
} elseif (strpos(gethostbyaddr($users2['hostname']),"msnbot")!== false) {
echo "MSN бот";
} elseif (strpos(gethostbyaddr($users2['hostname']),"lycos")!== false) {
echo "Lycos.com бот";
} elseif (strpos(gethostbyaddr($users2['hostname']),"ia_archiver")!== false) {
echo "Archive.org бот";
} elseif (strpos(gethostbyaddr($users2['hostname']),"aport")!== false) {
echo "Aport бот";
} elseif (strpos(gethostbyaddr($users2['hostname']),"crawl")!== false) {
echo "Поисковый бот";
} elseif (strpos(gethostbyaddr($users2['hostname']),"bot")!== false) {
echo "Поисковый бот";
} elseif (strpos(gethostbyaddr($users2['hostname']),"bot")== false) {
echo "Гость";
};
?></a></li>
<?
} else {
$num_users++;
?>
<li class="block-user-3"><a title="View user profile." href="?q=users/<?=$users2['uid']?>"><?=$users2['name']?></a></li>
<?
}
}
?>
</ul>
</div>
There are <em><?=$num_users?> user<?=($num_users>1)?'s':''?></em> and <em><?=$num_guest?> guest<?=($num_guest>1)?'s':''?></em> online.
</div>
</div>?>
Раз пошла такая пьянка, может и browscap прикрутить?
Странно.
Вместо списка выдает:
unix_timestamp()-%d order by {sessions}.timestamp desc', $time_period); ?>
There are user1)?'s':''?> and guest1)?'s':''?> online.
?>
Видимо у меня что-то с головой...
Не с головой.
Все правильно у вас выводит.
Вы сохранили текст, он текст и выводит.
Пересохраните блок.
Формат ввода - PHP code.
И что характерно - именно как код и сохранял.
Да и еще при инсталляции модуля иконок - сообщение об ошибке БД...
А как сделать чтобы этот блок видел только админ?
Ошибка:
Parse error: syntax error, unexpected '<' in /home/.../public_html/.../includes/common.inc(1695) : eval()'d code on line 2
Спасибо, очень пригодилось!
Несколько переделал код, теперь показывает список авторизованных пользователей, список поисковых ботов. Данный код находится на сайте .
echo '<div id="block-user-3" class="block block-user">';
$array_users;
$array_robot;
$bool_robot[0] = false;//"Google бот";
$bool_robot[1] = false;//"Yandex бот";
$bool_robot[2] = false;//"Rambler бот";
$bool_robot[3] = false;//"MSN бот";
$bool_robot[4] = false;//"Lycos.com бот";
$bool_robot[5] = false;//"Archive.org бот";
$bool_robot[6] = false;//"Aport бот";
$bool_robot[7] = false;//"other";
$num_guest = 0;
$num_robot = 0;
$num_users = 0;
$time_period = variable_get('user_block_seconds_online', 600);
$users = db_query('select {users}.name, {sessions}.uid, {sessions}.hostname from {users} left join {sessions} on {users}.uid={sessions}.uid where {sessions}.timestamp > unix_timestamp()-%d order by {sessions}.timestamp desc', $time_period);
echo '<div class="content">';
$num_guest = 0;
$num_users = 0;
while( $users2 = db_fetch_array($users) )
if( $users2['uid']==0 ) {
if ((strpos(gethostbyaddr($users2['hostname']),"googlebot")!== false)&&(!$bool_robot[0])) {
$array_robot[$num_robot++] = "Google бот";
$bool_robot[0] = true;
} elseif ((strpos(gethostbyaddr($users2['hostname']),"yandex")!== false)&&(!$bool_robot[1])) {
$array_robot[$num_robot++] = "Yandex бот";
$bool_robot[1] = true;
} elseif ((strpos(gethostbyaddr($users2['hostname']),"StackRambler")!== false)&&(!$bool_robot[2])) {
$array_robot[$num_robot++] = "Rambler бот";
$bool_robot[2] = true;
} elseif ((strpos(gethostbyaddr($users2['hostname']),"msnbot")!== false)&&(!$bool_robot[3])) {
$array_robot[$num_robot++] = "MSN бот";
$bool_robot[3] = true;
} elseif ((strpos(gethostbyaddr($users2['hostname']),"lycos")!== false)&&(!$bool_robot[4])) {
$array_robot[$num_robot++] = "Lycos.com бот";
$bool_robot[4] = true;
} elseif ((strpos(gethostbyaddr($users2['hostname']),"ia_archiver")!== false)&&(!$bool_robot[5])) {
$array_robot[$num_robot++] = "Archive.org бот";
$bool_robot[5] = true;
} elseif ((strpos(gethostbyaddr($users2['hostname']),"aport")!== false)&&(!$bool_robot[6])) {
$array_robot[$num_robot++] = "Aport бот";
$bool_robot[6] = true;
} elseif (((strpos(gethostbyaddr($users2['hostname']),"crawl")!== false)||(strpos(gethostbyaddr($users2['hostname']),"bot")!== false))&&(!$bool_robot[7])) {
$bool_robot[7] = true;
$array_robot[$num_robot++] = "other";
} elseif (strpos(gethostbyaddr($users2['hostname']),"bot")== false) $num_guest++;
} else $array_users[$num_users++] = $users2['name'];
echo '<div class="item-list">';
if($num_users>0){
echo '<h3>Пользователи:</h3><ul>';
for($i=0;$i<$num_users;$i++)
echo '<li class="block-user-3">'.$array_users[$i].'</li>';
echo '</ul>';
}
if($num_robot>0) {
echo '<h3>Поисковые роботы:</h3><ul>';
for($i=0;$i<$num_robot;$i++)
echo '<li class="block-user-3">'.$array_robot[$i].'</li>';
echo '</ul>';
}
echo '</div><br />';
echo 'Сейчас на сайте';
if($num_users>0){
echo ' <em>'.$num_users.' пользовател';
if($num_users>1) echo 'я';
else echo 'ь';
echo '</em>';
}
if($num_guest>0){
if($num_users>0){
if($num_robot>0) echo ',';
else echo 'и';
}
echo '<em>'.$num_guest.' гост';
if($num_guest>1) echo 'ей';
else echo 'ь';
echo '</em>';
}
if($num_robot>0){
if(($num_guest>0)||($num_users>0)) echo ' и';
echo ' <em>'.$num_robot;
if($num_robot==1) echo ' робот';
elseif(($num_robot>1)&&($num_robot<5)) echo ' роботa';
else echo ' роботов';
echo '</em>';
}
echo '.</div></div>';
?>