Ładowanie...
dos Jogger
...czyli pomyślenia, przemyślenia i te sprawy.
CLOSED
Ikonka Jabber: Dostępny
seba.dos1 w Poczcie Google

Super Derpy: Muffin Attack
http://mytimeorganizer.com/ | http://www.pinkiedb.com/

Google Google Yahoo
16 czerwca
2008
22:04:04

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('`','``','&lt;','&gt;');
$_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/>&amp;www=<CURRENT_USER_HREF/>&amp;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/>&amp;www=<CURRENT_USER_HREF/>&amp;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 :)

Infobox
Wpis został dodany na poziomie 0, co oznacza, że .
Kategorie: Jogger, Techblog
ID wpisu: e401893 Trackback

Komentarze:

1
  Maja 16 czerwca 2008
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 ;).

2
  Maja 16 czerwca 2008
22:11:48

*to to ;).

3
kubz 16 czerwca 2008
22:13:08

I teraz wszyscy razem: „dzię-ku-je-my” ;)

4
kkk 16 czerwca 2008
22:22:21

„Kto przegląda #_:” nie uwzględnia wizyt spod TOR’a?
Po wejściu z OperaTor, nic nie pokazuje. Ale i też nie pokazuje innych obecnych z wizytą.

Dopiero po włączeniu w OperaTor „Enable JavaScript”, pokazują się wizytujące osoby.

5
Livio 16 czerwca 2008
23:05:52

Dobrze byłoby, gdyby to mogło istnieć po stronie Joggera – wszyscy moglibyśmy tego używać i wszyscy zazdrościliby nam zintegrowanej funkcjonalności MyBlogLog :> .

6
Crozin 16 czerwca 2008
23:06:15

Taka moja mała dygresja: dane trafiające do MySQL zdecydowanie lepiej filtrować mysql_real_escape_string() a tuż przed wyświetleniem na stronie HTML htmlspecialchar()

I jak już kubz napisał: Dzię-ku-ję! :)

7
  trójkąt 16 czerwca 2008
23:17:01

Cool, powinni to zaimplementować do joggera.

8
  danadam 16 czerwca 2008
23:20:51

Jest jakiś problem z polskimi znakami:
Michał Ochman
trójkąt

9
  Maja 16 czerwca 2008
23:22:39

dandam: Ja mam ładnie. Z polskimi :].

10
kkk 16 czerwca 2008
23:25:37

U mnie też krzaczy.

11
  dos 16 czerwca 2008
23:27:38

Zapomniałem o kodowaniu w headerze, więc efekt zależy od przeglądarki. Jutro dopiszę, razem z kilkoma innymi poprawkami…

12
Lukem 16 czerwca 2008
23:58:10

Jutro (a wlasciwie dzisiaj, bo już północ :)) to sprawdzę, pomysł wygląda na ciekawy…

13
cimlik 17 czerwca 2008
14:39:22

Całkiem zgrabnie Ci to wyszło, imo przydałaby się taka opcja w ogóle w panelu administracyjnym.

14
  Luken 17 czerwca 2008
15:20:19

Zakoduj to na Utf-8, będzie bez krzaków.

15
  dos 17 czerwca 2008
17:24:48

Luken: na tym blogu wszystko jest w utf-8, więc nie w tym rzecz ;) Wystarczy dodać na sam początek pliku PHP: <?header(‘Content-Type: text/html; charset=utf-8’);?>. U siebie już to dodałem.

Szykuje się spora aktualizacja tych skryptów (zgodnie z Waszymi uwagami i spostrzeżeniami), możliwe, że jeszcze dziś, więc stay tuned ;)

16
kkk 17 czerwca 2008
17:29:42

@dos, i teraz wyświetla poprawnie.

17
  danadam 17 czerwca 2008
17:59:22

A dlaczego mnie nie dodaje? Przeglądam bloga jako zalogowany pod Operą i jako niezalogowany pod Firefoksem, a na liście pusto:
Brak zalogowanych joggerowiczów na tym blogu.

18
  dos 17 czerwca 2008
18:09:27

kkk: na #_ akurat polegam wyłącznie na JavaScripcie :)
danadam: masz włączony JS? Jeśli tak, to sprawdź, jak wygląda tag <script> dotyczący tego skryptu. Możliwe, że jakieś znaki specjalne w ksywce „psują” ten znacznik – postaram się niedługo znaleźć na to sposób ;)

19
  danadam 17 czerwca 2008
18:15:08

Już mam. W ustawieniach joggera nie miałem wypełnionego pola ‘Autor’ i w URLu wywołującym skrypt wstawiany był parametr ‘nick’ bez wartości.

20
  Luken 17 czerwca 2008
19:05:27

Chodziło mi o plik, żeby zakodować w UTF-8, oczywiście header(); też tu będzie działał. ;)

21
  dos 17 czerwca 2008
19:06:23

No plik był tak zakodowany od samego początku, trzeba było tylko o tym poinformować niektóre przeglądarki, właśnie headerem :P

22
  mina86 18 czerwca 2008
17:59:43

Header to raczej text/javascript; charset=utf-8, a nie text/html; charset=utf-8.

23
  dos 18 czerwca 2008
18:00:42

mina86: Fakt. Ja już coś ostatnio nie myślę :D

24
  Pawkow 20 czerwca 2008
21:37:11

Wiesz co @dos, ja popisze trochę u Ciebie, to może Twój wpis wyleci przed mojego :D

A żeby OffTopa nie robić, to gratuluję tych OGROMNYCH zmian :D

25
  dos 20 czerwca 2008
21:38:08

Małymi kroczkami, ale zawsze do przodu :P A Ty wracaj sobie tutaj: http://pawkow.jogger.pl/2008/06/20/dostalem-swiadectwo/ ;D

26
  Maja 20 czerwca 2008
21:38:46

Lol ^^

27
  dos 20 czerwca 2008
21:39:00

Żebyś wiedziała, że lol ;D

28
  Pawkow 20 czerwca 2008
21:40:41

Gdzieś jeszcze linka wklepiesz :> ?

A tak swoją drogą, masz naprawdę ładny design, prawie tak ładny jak mój :D I prawie tak skromny jak ja :P

http://img176.imageshack.us/img176/7650/errorfd0.png

29
  dos 20 czerwca 2008
21:41:46

Ach, bug stary jak świat, wraca średnio co dwie modyfikacje CSS, za każdym razem z innej przyczyny :>

30
Crozin 20 czerwca 2008
21:44:58

To może użyj zwykłego:
text-shadow: 1px 1px 1px #333;

co z tego, że tylko pod Operą i Safari zadziałą :P

31
  dos 20 czerwca 2008
21:51:42

[pod Konquerorem też :D] ...i nie ważne, że ja korzystam tylko z Firefoksa i Opery Mini ;>

32
Crozin 20 czerwca 2008
21:56:41

A nie myślałeś o tym, aby przenieść „ciężar” generowania cienia na JS? Bo skoro teraz tworzysz to przez

<element>32<span>32</span></element>

To jest to trochę nie tegs… mówimy o wpisie #32, nie #3232 :) Wygenerowanie w JS tego spana, z numerem/tekstem nie jest trudne i możnaby to potraktować jako „fiuczer” (czyli użytkowniką bez JS nic się nie stanie). Na pewno jest to lepsze rozwiązanie jeżeli chodzi o dostępność.

Sorry za lekki OffTopic ;)

33
Crozin 20 czerwca 2008
21:57:34

Nie ma tu opcji „Edytuj” więc napisze jeszcze:

Krzaczy Ci się blog:
Brak informacji – prawdopodobnie MusicBot jest wyłączony.
(Opera)

34
  dos 20 czerwca 2008
21:58:16

Generowanie cienia przez JS jest na mojej liście TODO (już od dawna :D). W MusicBocie też brakuje headerów, poprawię jutro :P

35
Crozin 20 czerwca 2008
22:10:57

http://phpfi.com/325754

pisane z palca, ale wystarczy dostosować chyba :)

36
  dos 21 czerwca 2008
18:01:38

No i zrobione, dzięki ;)

37
kasia55424 28 czerwca 2008
20:46:30

Wszystko ok, ale ja nie rozumiem jednego ;P
Dlaczego, skoro jestem zalogowana, nie wyświetla mnie u Ciebie na Joggerku? :P No chyba, że widzisz to tylko Ty ;P

38
  dos 28 czerwca 2008
20:48:23

kasia55424: widocznie nie masz ksywki ustawionej w PA. Chyba zmodyfikuję skrypt tak, aby w przypadku braku ksywki pobierał nazwę jogga ;)

39
kasia55424 29 czerwca 2008
00:59:49

Jak zawsze masz rację. Wszystko działa ;D
Hm… kusisz :P trzeba to wypróbować :D


Dodaj komentarz:



Nawigacja:

Piwo, lody i Pepsi ;) FreeRunnerowe zamieszanie
napędzane i pędzone przez Jogger Joggera, layout i content by Jogger dos, inspirowane przez Jogger Maję :)