PHP z COOKIES - rotator bannerów
| DZIAŁANIE: |
![]() |
Kod:
KOD PRZED WSZELKIMI ZNAKAMI :

KOD
W SERWISIE :
![]()
Ewentualne Objaśnienia:
Mamy tutaj do czynienia z bardziej rozbudowanym jeśli chodzi o działanie
rotatorem bannerów niż kiedyś co pokazywałem bardzo prosty przykład na zrobienie
takiego rotatora. Ten jest oparty o pliki cookies. Co prawda idealnym
rozwiązaniem też on nie jest, ale ładnie obrazuje pewne możliwości, sposób
programowania itd. Jednak można także śmiało go używać, jeśli trzeba nam po
prostu jakiś prosty rotator.
W tym przykładzie system wyświetla wylosowany banner 1 z 5. Zaletą jest to, że
tutaj żaden banner się nie powtórzy dopóki nie zostaną wyświetlone wszystkie,
czyli ogólnie rzecz biorąc szanse na wyświetlenie każdy banner ma jednakowe (
czyżby ? ) . Na wstępie mówię, że dla tego kodu mamy bannery o nazwach 1 do
5.gif w podkatalogu 'bannery'. Oczywiście wszystko to można sobie w kodzie
modyfikować.
Kod skomplikowany nie jest, ale jest tutaj parę nowych albo prawie nowych
rozwiązań, dlatego troszkę opowiem co tutaj się dzieje :
1). Na początku w pierwszym kodzie w pierwszej pętli sprawdzamy, które bannery
nie były jeszcze wyświetlane ( czyli po prostu czy istnieje takie cookie
odnoszące się do danego bannera ). Jeżeli istnieje ( cookie ) to zmienna $jest
przyjmuje jego wartość, jeżeli nie istnieje zmienna ta ma wartość 0.
2). No i dalej jeżeli zmienna $jest ma wartość 0 - czyli znaleziono banner,
który jeszcze nie był wyświetlany - wpisujemy jego numer do tablicy $tab oraz
ustawiamy wartość zmiennej $znaleziono na TRUE (1). Zwróćmy uwagę na wpisywanie
tego numery do tablicy mamy kod :
$tab[] = $i; - jak widać nie podano indeksu, do którego mamy wpisać numer. W takiej sytuacji zostanie wpisany on do pierwszego wolnego pola w tablicy, to wygodna bardzo metoda i często stosowana, warto o niej sobie pamiętać !
3). Po wyjściu z pętli jeżeli zmienna $znaleziono ma wartość FALSE (0) - czyli oznacza to, że w poprzedniej pętli nie znaleziono bannera, który nie był jeszcze wyświetlany - czyli po prostu każdy już został wyświetlony do tablicy wpisujemy wszystkie bannery. Jak widać mamy zapis :
$tab[$i-1] = $i; - to niby nic skomplikowanego, ale dla przypomnienia powiem, że indeksy tablic zaczynają się od liczby 0, a nie 1 więc skoro w pętli zmienna $i przyjmuje na początku wartość 1, to należy właśnie zastosować taki zapis $i-1, aby poprawnie wpisywać do tablicy o indeksach od 0 do 4 ( 5 elementów ).
4). No i teraz pozostała nam kwestia wylosowania bannera, jak widzimy wylosowany numer ( z tablicy $tab ) przypisywany jest zmiennej $nr. Jak to się dzieje, zobaczmy :
$nr = $tab[rand()%count($tab)]; - jak widać zmiennej $nr przypisywana zostaje wartość ( czyli numer ) z tablicy $tab o wylosowanym indeksie. Jak wygląda to losowanie - zobaczmy - funkcja rand wylosuje nam dowolną liczbę ( zapis rand() ) następnie funkcja count - zliczy nam ile jest elementów w tabeli. No i teraz mamy operator modulo czyli %, który daje nam resztę z dzielenia wylosowanej liczby przez ilość zapisanych elementów w tablicy $tab. Dlaczego tak ?? To proste, załóżmy że w tabeli mamy 5 elementów czyli 5 numerów bannerów ( się zrymowało hehe ). Z dzielenia jakiejkolwiek liczby przez 5 zawsze zostaje reszta 0,1,2,3 lub co najwyżej 4. I tak otrzymujemy tablicę $tab o indeksach od 0 do 4 - i ta wartość jest przypisywana zmiennej $nr.
5). No i już po wylosowaniu zostaje ustawiane cookie o nazwie bannerNR ( czyli na przykład banner0, banner1 itd ) z wartością 1 oraz ustalonym czasem ważności.
Dalej to już tylko w danym miejscu naszego serwisy, strony WWW mamy
umieszczenie pliku "bannery/$nr.gif" - czyli wylosowany numer ( a zarazem banner
) zostaje wyświetlony.
Tutaj nie zrobiłem tego, aby wyświetlany banner był zarazem hiperłączem do danej
strony. Ale można y to łatwo i szybko zrobić, nawet nie byłoby potrzeby dalej
"babrać" się w cookie - można by po prostu dopisać do wyświetlania hiperłącze i
dodać instrukcję switch, która zależnie od wylosowanego numery do danej strony
jest hiperłączem ( mogłoby tez być if - ale to już mówiłem, że switch to lepsze
i szybsze rozwiązanie ).
Pozostaje jeszcze jedna kwestia - jest to rotator jak mówiłem, który dzięki
cookie pozwala wyświetlać bannery z równym prawdopodobieństwem. Czyli żaden
banner nie zostanie wyświetlony ponownie zanim nie zostaną wyświetlone wszystkie
inne.
No jednak należy zauważyć jedną rzecz - jest możliwość taka, że banner
wyświetlany jako ostatni ( wcześniej wyświetlono wszystkie 4 inne ) zostanie
wyświetlony przy następnym wyświetlaniu każdego jako pierwszy, czyli siłą rzeczy
zostanie wyświetlony 2 razy pod rząd. Jest to taka mała wada tego rozwiązania,
ale nie warto raczej tutaj na tym etapie specjalnie kombinować z jej
modyfikacją, gdyż z czasem pokażę Wam lepsze rozwiązania na rotator bannerów,
chociaż ten wcale nie jest zły.