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.