2008
Who is here?
Stali czytelnicy #_ (haha) i czytelnicy Nerdbloga D4rky'ego (już bardziej prawdopodobne :P) zauważyli zapewne kilka zmian na tym blogu. Oprócz tych związanych z treścią na nim (jak inspiracja dodana w stopce :*) i kosmetycznych, jak justowanie (hmm, wspominałem o inspiracji? :>) pojawiła się także bardziej funkcjonalna. Otóż - zainspirowany (coś zdaje mi się, że powtarzam za często to słowo ;D) notką D4rky'ego o nowych tagach na Joggerze postanowiłem jakoś twórczo je wykorzystać. Pierwszy pomysł, jaki wpadł mi do głowy, to informacja, kto z zalogowanych joggerowiczów przegląda tego bloga! :D
Jako, żem wychowany w duchu open source (no, w sumie to sam się tak wychowałem :P), nie mógłbym nie podzielić się moją pracą, zwłaszcza, że zajęła ona mi nie więcej, niż 5 minut z drobną przerwą :D Postawiłem na prostotę wykonania, adekwatną do prostoty pomysłu ;)
Jako, że funkcjonalność ta z powodzeniem może zostać uznana za dodatkową, myślę, że można posłużyć się JavaScriptem nie zważając na osoby, które mają JS wyłączony (małą dygresję od tego planuję na koniec wpisu ;>). Tak więc wystarczy napisać skrypt, w moim przypadku w PHP, który będzie przetwarzał informacje podane mu za pomocą metody GET i zwracał wynik w postaci kodu JavaScript. Już czaicie tą prostotę? KISS! :)
Najpierw zajmiemy się częścią PHP i MySQL. Na początku tworzymy tabelę "whoishere", zawierającą 4 kolumny: `time` typu INT (bądź też TIMESTAMP, do wyboru, do koloru :D), oraz `nick`, `www` i `favicon`, wszystkie typu VARCHAR. Następnie poniższy kod, po uzupełnieniu konfiguracją serwera MySQL, wysyłamy na nasz serwer:
function whoIsHere(lol) {
<?
$baza_host='localhost';
$baza_user='dos';
$baza_pass='dos';
$baza='dos';
mysql_connect($baza_host, $baza_user, $baza_pass) or die ("lol.innerHTML='Błąd w połączeniu z bazą danych.'; }");
mysql_select_db($baza) or die ("lol.innerHTML='Błąd w wyborze bazy danych.'; }");
$teraz=time();
mysql_query('DELETE FROM `whoishere` WHERE time < '.($teraz-(60*5)));
$zamienz=array('\'','"','<','>');
$zamienna=array('`','``','<','>');
$_GET['nick']=str_replace($zamienz,$zamienna,$_GET['nick']);
$_GET['www']=str_replace($zamienz,$zamienna,$_GET['www']);
$_GET['favicon']=str_replace($zamienz,$zamienna,$_GET['favicon']);
if (($_GET['nick']!='') && ($_GET['www']!='')) {
if (mysql_num_rows(mysql_query('SELECT * FROM `whoishere` WHERE `www`=\''.$_GET['www'].'\''))==0) {
mysql_query('INSERT INTO `whoishere` SET `time`='.$teraz.', `nick`=\''.$_GET['nick'].'\', `www`=\''.$_GET['www'].'\', `favicon`=\''.$_GET['favicon'].'\'');
}
else {
mysql_query('UPDATE `whoishere` SET `time`='.$teraz.' WHERE `www`=\''.$_GET['www'].'\'');
}
}
echo 'lol.innerHTML=\'';
$q=mysql_query('SELECT * FROM `whoishere`;');
if (mysql_num_rows($q)==0) {
echo "Brak zalogowanych joggerowiczów na tym blogu.";
}
else {
while ($row=mysql_fetch_array($q)) {
if ($row['favicon']!='') {
echo '<img src="'.$row['favicon'].'" width="16" height="16"/> ';
}
echo '<a href="'.$row['www'].'">'.$row['nick'].'</a><br />';
}
}
echo '\';';
?>
}Następnie, do szablonu bloga dodajemy następujący kod:
<NOUSER_BLOCK> <script type="text/javascript" src="http://TWÓJ-SERWER/whoishere.php"> </script> </NOUSER_BLOCK> <JOGGER_USER_BLOCK> <script type="text/javascript" src="http://TWÓJ-SERWER/whoishere.php?nick=<CURRENT_USER_NICK/>&www=<CURRENT_USER_HREF/>&favicon=<CURRENT_USER_FAVICON2/>"> </script> </JOGGER_USER_BLOCK> <ADMIN_BLOCK> <script type="text/javascript" src="http://TWÓJ-SERWER/whoishere.php?nick=<CURRENT_USER_NICK/>&www=<CURRENT_USER_HREF/>&favicon=<CURRENT_USER_FAVICON2/>"> </script> </ADMIN_BLOCK>
Potem do zdarzenia onLoad dodajemy naszą funkcje, np. poprzez:
window.onload = whoIsHere(document.getElementById('whoishere'));
Ostatnim punktem jest dodanie gdzieś do szablonu bloga elementu z id="whoishere" :)
Tak jak obiecałem wcześniej, dam małego hinta - jeśli chcecie, aby skrypt zbierał też informacje od osób, które mają wyłączony JavaScript, spróbujcie wywołać skrypt PHP poprzez ukryty znacznik <img> lub <iframe>.
Wszelkie komentarze, propozycje i bug-reporty mile widziane. Jeśli komuś przydał się ten wpis, nie zapomnijcie podziękować mojej inspiracji - to właśnie ona jest jednym z głównych bodźców, skłaniających mnie do pisania :)
Jabber: Dostępny



22:10:52
A „inspiracja” dziekuje za reklamę ;). Co do skryptu: bardzo fajne zastosowanie nowych tagów. Może kiedyś, jak się naumiem, to do wykorzystam u siebie ;).