W tej części kursu zajmiemy się ... ciasteczkami ;) Jak pewnie wiecie, ciasteczka to jedna z możliwości przechowywania danych użytkownika - przydają się przykładowo do przechowywania konfiguracji strony. Ponadto można je wykorzystać nie tylko w JavaScript, ale także na przykład w PHP - w ten sposób tworząc sobie pomost do przekazywania informacji pomiędzy językami server-side i client-side.

W pliku, który dziś omawiamy znajduje się klasa Cookie posiadająca 3 metody - set, get i remove. Pierwsza z nich odpowiada za stworzenie i zapis danych w ciasteczku. Druga służy do pobierania danych z danego ciasteczka, a trzecia usuwa ciasteczka.

set

Metoda set jest najbardziej rozbudowana ze wszystkich wymienionych metod - wymaga podania nazwy, wartości i opcji ciasteczka. Jej składnia wygląda następująco:

Cookie.set('nazwa', 'wartosc', {opcje});

Pierwsze dwie zmienne i ich przeznaczenie jest chyba jasne, jeśli chodzi o opcje to mamy do dyspozycji 4 właściwości:

  • domain - to domena do jakiej należy tworzone ciasteczko,
  • path - ścieżka do jakiej należy ciasteczko - jeżeli chcemy by działało ono na wszystkich podstronach zapisujemy wartość tej opcji jako "/",
  • duration - czas ważności ciasteczka - podajemy go jak liczbę dni,
  • secure - wartość logiczna, która decyduje o tym czy ciasteczko ma być widoczne tylko podczas połączeń szyfrowanych (https).

To stwórzmy ciasteczko, które będzie przechowywało nick użytkownika i będzie dostępne w obrębie całej domeny przez 20 dni:

Cookie.set('nick','Dziudek'{path: "/",duration: 20});

Prawda, że proste w użytkowaniu ? Główny przykład pokażę później, a teraz przejdźmy do metody get...

get

Metoda get służy do pobierania wartości ciasteczek według podanej nazwy. Jej jedynym argumentem jest nazwa ciasteczka, jakie chcemy odczytać.

Składnia jest oczywiście banalna:

Cookie.get('nazwa');

Tak więc gdybyśmy chcieli pobrać wartość wspomnianego wcześniej ciasteczka, zapiszemy:

Cookie.get('nick');

Powyższy kod zwróci wartość 'Dziudek'.

Jak widzicie obsługa możliwości klasy Cookie jest bardzo łatwa, a ostatnia metoda - remove ma składnię prawie identyczną co metoda get.

remove

Ostatnia metoda klasy Cookie - remove służy oczywiście usuwaniu ciasteczek - robimy to pod względem składniowym podobnie jak w metodzie get:

Cookie.remove(cookie);

Różnica polega na tym, że zamiast nazwy musimy podać uchwyt co danego ciasteczka.

Zatem gdybyśmy chcieli usunąć wspomniane już dwa razy ciasteczko "nick" to zapiszemy:

var value = Cookie.get('nick');
var cookie = Cookie.set('nick',value);
Cookie.remove(cookie);

I tym sposobem mamy za sobą omówienie obsługi pliku Cookie.js - pora na przykład bardziej życiowy. Pamiętacie zapewne jeden z przykładów, który pojawił się przy pliku Assets.js, a służył do dynamicznej zmiany stylu strony ? Wszystko fajnie, ale co to za funkcjonalność, która nie pozwala zapamiętać ulubionego stylu użytkownika ? Teraz sobie już z tym poradzimy :)

Przyda się odrobina kodu PHP - zmiana stylu podczas ładowania strony wydaje mi się bezsensowna, a z pomocą PHP styl zmienimy już na etapie generowania kodu strony.

Przyjmijmy, że styl strony będzie przechowywany w ciasteczku o nazwie style, a jego wartością będzie liczba od 1 do 3. Ponieważ notacja nazw styli wygląda tak - style-x.css gdzie x to liczba od 1 do 3 pozwolę sobie w miejsce kodu:

wstawić kod:

A gdzieś przed tym jeszcze kod:

<?php
   (isset($_COOKIE['style'])) ? $styl = $_COOKIE['style'] : $styl = 1;
?>

Który sprawi, że domyślnie załadowany zostanie ostatnio wybrany styl.

To teraz od strony server-side - do zdarzeń onclick przycisków wyboru styli musimy dodać zapis w cookie:

if(Cookie.get('style') !== 1){
   Cookie.set('style',1,{duration: 365,path: "/"});
}

Oczywiście w kolejnych przyciskach zmieniamy 1 na 2 lub 3.

Pokazany powyżej kod sprawdzi czy aktualna wartość ciasteczka nie jest taka jak właśnie wybierana i jeżeli jest różnica (lub ciasteczka nie ma) to zostanie ustawiona nowa wybrana przez użytkownika wartość.

To jeszcze wypadałoby dodać przycisk, który będzie usuwał ciasteczko ze stylem:

$('btn4').addEvent('click',function(){
   var value = Cookie.get('style');
   var cookie = Cookie.set('style',value,{duration: 365,path: "/"});
   Cookie.remove(cookie);
});

I działający przykład:

PRZYKŁAD

W następnej części kursu zajmiemy się formatem JSON, a dokładniej plikiem json.js

Komentarze do wpisu "Mootools 1.1 - Cookie.js":

1. Off napisał(a):
15 lipca 2007, 18:15:17

Bardzo ładny wpis. Coraz bardziej zbliżasz się do końca ;)

2. Dziudek napisał(a):
15 lipca 2007, 18:17:39

@Off – na razie to się zbliżam do połowy kursu :P BTW nawet nie zauważyłem, a to mój setny wpis na tym joggerze ^^

3. Rafał 'RaVbaker' Piekarski napisał(a):
15 lipca 2007, 21:33:22

Gratuluję setnego wpisu i oczywiście podziwiam zapał w tworzeniu kolejnych części kursu.

4. Dziudek napisał(a):
15 lipca 2007, 21:35:51

@RaVbaker – żeby jeszcze więcej czasu było ;) Ten kurs już dawno powinienem był ukończyć, ale jak zwykle czas… a właściwie jego brak :/

5. MatheW napisał(a):
15 lipca 2007, 22:04:47

Szczerze żałuje, że jeszcze nie dobrnąłes do konca – akurat jade na wies i chcialem se to wszystko wydrukowac :P a duzo ciekawych rzeczy jeszcze nie ma, mimo ze kurs swietny.. pozostaje grzebanie w dokumentacji i demach. Lecz jesli masz jeszcze jakies ciekawe zrodlo to wal smialo :]

6. Dziudek napisał(a):
15 lipca 2007, 22:07:28

@MatheW – mootorialIMHO czasami się przydaje, no i wertowanie forum mootools wiele razy mi pomogło przy co dziwniejszych problemach ;)

Generalnie najlepiej wydrukować sobie kod źródłowy mootools ;) Z niego chyba najwięcej ciekawostek wyciągłem ;)

7. MatheW napisał(a):
15 lipca 2007, 22:34:46

wielkie dzieki, lukam se, drukuje, sciagam i na wsi cwicze :F

generalnie brawa za kurs :]

8. MatheW napisał(a):
29 lipca 2007, 02:13:17

Heh i kurde cos nie moglem wykonac dobrze rozsuwanego menu z efektem slideIn – gdy menu ma position absolute. wsadzalem je w konterner wypozycjonoway, probowalem i nic… wziolem jquery poszlo latwo :]

tylko ze to mootools duzo lepsze ma tutki i samo demos.mootools.net prezentuje duzo – i niestety bede musial probowac zrobic to co upatrzylem na mootools poprzez jquery – chociaz patrzac na liczbe pluginow tego skryptu (sic) to mysle ze znajde co trzeba :D

9. Dziudek napisał(a):
29 lipca 2007, 02:16:30

@MatheW – może zapomniałeś o jakimś szczególe ;) Powiem tak – na pewno jakoś to się za pomocą mootools da – tylko trzeba pokombinować ;]

10. MatheW napisał(a):
29 lipca 2007, 11:46:00

Niby w mootoorialu jest napisane, ze w 1.11 juz mozna slajdnac blok wypozycjonowany ale cos nie dalo rady… nawet jak dodalem wspomniany kontener. Po za tym czasami po mouseleave czy mouseout nie dziala i zostaje rozsuniete :/ na jquery takich problemow nie bylo.

Jeszcze dzisiaj się z tym zmierze xD

11. MatheW napisał(a):
29 lipca 2007, 12:38:06

no dalo rade zrobic z czego jestem calkiem zadowolony :] tylko ciekawa rzecz sie stala:

po dodaniu slidera do elementu zjechal mi on troche w dol. nadmienie ze jego wrapper byl pozycjonowany absolutnie – top:33 px. No i z tego co zauwazylem moo obejmuje element slajdowany w diva – i przyjmuje on wartosci rodzica. IMHO powinien on dostawac top: 0 :] Po takim ustawieniu juz dziala gites i wracam na mootools :F

12. Dziudek napisał(a):
29 lipca 2007, 14:07:29

@MatheW – a nie mówiłem, że się da ;> :D

13. MatheW napisał(a):
29 lipca 2007, 14:49:33

noo ale z jakim trudem – w jquery zrobilem to raz dwa. Ale na szczescie inne rzeczy wydaja sie latwiejsze w moo, a po za tym moo wypada ponoc lepiej w kwestii szybkosci.

Ale ja JS nienawidze – teraz 2 godziny meczylem sie zeby zrobic porzadna iteracje by dodac slide wszystkim elementom, struktura taka:

<ul> <li><h2>Naglowek</h2> <div> <!!-- wypozycjonowany--> <ul> <li>Pozycja menu</li> <li>Pozycja menu</li> </ul> </div> </li> <li><h2>Naglowek</h2> <div> <!!-- wypozycjonowany--> <ul> <li>Pozycja menu</li> <li>Pozycja menu</li> </ul> </div> </li> </ul>

i wez tu sie czloweiku potem babraj, z bindowaniem this, z dodawaniem funkcji ehh blee niecierpie tego, dobrze ze efekty choc sa dobre :F

dzieki jeszcze raz za ten kurs, przynajmniej szybciej to zrobilem :]

Dodaj komentarz:

Textile Lite włączony ( szczegółowy opis znaczników ):
*strong* | # lista numerowana | * lista wypunktowana | _em_ | __italic__ | "link":http:// | bq. cytat.