Users Online

boboo

Avatar: boboo

2011-02-18 21:39

1. Utwórz w db/ pusty plik UsersOnline.bob
2. W core/common.php dodaj funkcje:
function usersOnline(){
$sPlik='db/UsersOnline.bob';
$time=time();
$iOnline=$time-600;
$ip=$_SERVER['REMOTE_ADDR'];
$aCheckTime=@file($sPlik);
while(list($line_num,$line)=@each($aCheckTime)){
$sCzas=explode('$',$line);
if($sCzas[0]<=$iOnline){
$contents=file_get_contents($sPlik);
$sPusty=null;
$sZamien=str_replace($line,$sPusty,$contents);
file_put_contents($sPlik,$sZamien,LOCK_EX);
chmod($sPlik,0777);
}
}
$aCheckIP=@file($sPlik);
while(list($line_num,$line)=@each($aCheckIP)){
$aIP=explode('$',$line);
if($aIP[1]==$ip){
$contents=file_get_contents($sPlik);
$sPusty=null;
$sZamien=str_replace($line,$sPusty,$contents);
file_put_contents($sPlik,$sZamien,LOCK_EX);
chmod($sPlik,0777);
}
}
file_put_contents($sPlik,$time.'$'.$ip.'$'."\n", FILE_APPEND | LOCK_EX);
$Zawartosc=file($sPlik);
$iUserOnline=count($Zawartosc);
return $iUserOnline;
}
function usersOnlineAdmin(){
$sPlik='db/UsersOnline.bob';
$sZawartosc=file($sPlik);
$iUserOnline=count($sZawartosc);
return $iUserOnline;
}
3. W index.php NAD
if(isset($aActions['f']...
dodaj:
$iUsersOnline=usersOnline();
4. W admin.php NAD
loginActions($p,....
dodaj:
$iUsersOnlineAdmin=usersOnlineAdmin();
5. W templates/container.tpl dodaj w odpowiednie dla wyglądu strony miejsce zmienną $iUsersOnline
6. Jeśli chcesz to oglądać też w panelu admina, wstaw w jakąś templatkę w templates/admin/xxx.tpl zmienną $iUsersOnlineAdmin

Punkt 1. nie jest konieczny, lecz jeśli nikt jeszcze nie wejdzie na stronę i tego pliku nie będzie, w panelu admina pojawi się meldunek o braku tego pliku.
Liczba 600 w górnym przykładzie jest ilością sekund, przez jaką uznajemy jakiegoś usera, że jest online od momentu "dotknięcia" przez niego naszej strony.

Zasada działania:
Plik UsersOnline.bob (jeśli nie jest pusty) ma strukturę: Czas$IP$
Bierzemy Czas i IP użytkownika.
Przeszukujemy plik UsersOnline.bob po kryterium Czas - 600 sekund (czyli szukamy wpisów starszych niż 10 minut). Jeśli taki znajdujemy - kasacja tej linijki.
To samo z IP, jeśli taki istnieje - kasacja tej linijki.
Po czym wpisujemy świeży Czas i IP.
To się dzieje tylko z poziomu strony gościa.
Z panelu admina tylko odczytujemy ilość linijek (a co za tym idzie, userów online) z Pliku. Co oznacza, że login na stronie admina nie zwiększa liczby userów online.

Zabawę we wkładanie tych zmiennych w templatkach i ich "designowanie" zostawiam wam.

» Quick.Cms v3.x

http://it-service.kimla.de

treewood (OpenSolution)

Avatar: treewood

2011-02-18 22:15

boboo - zrob ladna instrukcje z tego i sie umiesci jako dodatek na naszym serwerze oczywiscie z informacja, ze jestes autorem itd itp

boboo

Avatar: boboo

2011-02-19 20:14

@treewood,
na jaki adres posłać gotowca?
Taki ładny zrobiłem, w stylu QC ze wszystkimi szykanami ($aExp, $iKey, angielskie nazwy zmiennych itp.)
;-)

http://it-service.kimla.de

Makaron

Avatar: Makaron

2011-02-21 16:00

Na info MALPECZKA opensolution.org jak mniemam.

Mak-Web.pl - Modyfikacje skryptów Q.Cart i Q.Cms

euphoria-art

Avatar: euphoria-art

2011-02-25 10:54

Bobo dzięki za przepis na licznik, jak możesz to napisz co mam jeszcze dodatkowo zrobić żeby był zintegrowany w plugin simplecounter, przykład pod linikiem:
http://img821.imageshack.us/img821/4736/beztytuusgo.jpg

Do góry
o nas | kontakt