Korzystając z tej strony zgadzasz się z polityką prywatności i regulaminem.
Akceptuj
WebInside.plWebInside.plWebInside.pl
  • Aktualności
  • Technologie
  • WWW
  • E-marketing
  • AI
  • Poradniki
  • e(Biznes)
Szukaj
  • Kontakt
  • Forum
WebInside.pl © 2023.
Czytasz: Własny mechanizm sesji, część 2
Udostępnij
Zaloguj się
Powiadomienia
Aa
WebInside.plWebInside.pl
Aa
Szukaj
  • Strona główna
  • Aktualności
  • Technologie webowe
  • Publicystyka
  • E-marketing
  • Poradniki
  • AI
  • Technologie
  • Artykuły partnerskie
  • Więcej
    • Kontakt
    • Mapa strony
Masz już konto? Zaloguj się
  • Aktualności
  • Technologie
  • WWW
  • E-marketing
  • AI
  • Poradniki
  • e(Biznes)
WebInside.pl © 2023.
WebInside.pl > Technologie webowe > Własny mechanizm sesji, część 2
Technologie webowe

Własny mechanizm sesji, część 2

WebInside.pl
Ostatnia aktualizacja: 07.07.2004
WebInside.pl
Udostępnij
Udostępnij

W poprzednim artykule pokazałem jak napisać własny mechanizm sesji, natomiast teraz spróbujemy rozbudować go tak, aby stał się koszykiem na zakupy.

Aby osiągnąć cel potrzebujemy zdefiniować dwie klasy, pierwsza z nich będzie odpowiedzialna za pojedyncze produkty natomiast druga będzie zajmować się resztą.

Zacznijmy od pierwszej z nich.

class Product
{
var $intId;
var $intQuantity;
var $strType;
}

W zasadzie nie ma co tu opisywać, klasa zawiera trzy zmienne, pierwsza przechowuje ID produktu, druga ilość zamówionych produktów, a trzecia w zasadzie może być opcjonalna odpowiada za typ zamówionego produktu. Co ciekawe nasz obiekt nie zawiera żadnych metod, więc w zasadzie jego jedynym zastosowaniem (zgodnym z przeznaczeniem) jest przechowywanie zmiennych.

Teraz zajmijmy się drugą klasą, jakie będą jej możliwości? No cóż nie będzie tego wiele, ale jak na prawdziwy koszyk przystało będzie pozwalać na: dodawanie, usuwanie i modyfikowanie zamówionych produktów, teraz zobaczmy krótką część kodu.

define( 'DELETE_ALL’, 'DELETE_ALL’ );

class shoppingCart extends session
{
var $arrProduct;

function create( &$objSession )
{
$strSidName = SESSION . 'sid’;
if ( !isset( $_GET[’sid’] ) && !isset( $_COOKIE[$strSidName] ) )
{
$objSession = new shoppingCart;
$objSession -> initSession();
}
else
{
$strSid = ( isset( $_COOKIE[$strSidName] ) ) ? $_COOKIE[$strSidName] : $_GET[’sid’];
$strFile = $strSid . ’.ses’;
if ( is_file( SESSIONS_PATH . $strFile ) )
{
$serialized = file_get_contents( SESSIONS_PATH . $strFile );
$objSession = unserialize( $serialized );
$objSession -> initSession();
if ( $objSession -> strIP != $_SERVER[’REMOTE_ADDR’] || $objSession -> strSID != $strSid )
{
unset( $objSession );
$objSession = new shoppingCart;
$objSession -> initSession();
}
} else {
$objSession = new shoppingCart;
$objSession -> initSession();
}
}
return $objSession;
}
}

Na samym początku definiujemy jedną stałą DELETE_ALL o wartości DELETE_ALL, może się to wydawać dziwne, ale ta stała przyda się w metodzie removeFromCart(), która będzie opisana na samym końcu, tymczasem zajmijmy się resztą naszego kodu. Pierwsza linijka mówi, że klasa shoppingCart jest rozszerzeniem klasy session (oczywiście, aby skorzystać z dobrodziejstw klasy session należy ją dołączyć do za pomocą funkcji include() tak samo ma się sprawa z klasą Produkt), to znaczy, że wewnątrz niej możemy korzystać z wszystkich metod i zmiennych klasy session. Zmienna $arrProduct będzie przechowywać tablice zawierającą wszystkie zamówione produkty.
Ten kto czytał poprzedni artykuł na pewno zauważy, że metoda create() jest niemal identyczna jak funkcja create() w klasie session, różnica polega na tym, że zamiast zajmować się obiektem typu session, zajmiemy się obiektem typu shoppingCart. Zostaje jeszcze pytanie co z metodą create() skoro w każdej z klas istnieją funkcje o takich nazwach? Otóż odpowiedź jest prosta, starsza z nich zostanie nadpisana przez nowszą, tak dzieje się zawsze przy dziedziczeniu.
Sama zasada działania tej metody została opisana wcześniej, więc nie ma sensu pisać tego ponownie, jednak pokrótce przypomnę do czego ona służy: A więc nasza metoda służy do tworzenia lub odserializowania sesji, wywołujemy ją za każdym razem przed użyciem jakiejkolwiek innej metody lub zmiennej.

Możemy już ‘odpalić’ nasz skrypt jednak wcześniej napiszmy kilka metod, które przydadzą się do obsługi koszyka, pierwszą z nich będzie addToCart().

function addToCart( $intId, $intQuantity, $strType )
{
// 1
$intProductsNum = sizeof( $this -> arrProduct );
for( $i = 0; $i < $intProductsNum; $i++ ){
if ( $this -> arrProduct[$i] -> intId == $intId )
{
return false;
}
}
// 2
$this -> arrProduct[$intProductsNum] = new Product;
// 3
$this -> arrProduct[$intProductsNum] -> intId = $intId;
$this -> arrProduct[$intProductsNum] -> intQuantity = $intQuantity;
$this -> arrProduct[$intProductsNum] -> strType = $strType;
return true;
}

Jak sama nazwa wskazuje, za pomocą tej metody będziemy dodawać produkty do koszyka. Przy wywoływaniu metody podajemy trzy zmienne: $intId oznacza numer zamówionego produktu, $intQuantity to cyfra całkowita, która określa ilość zamówionych produktów natomiast $strType to ciąg znaków który określa typ produktu.
(1) Na początku sprawdzamy ile jest produktów w koszyku, a następnie przeglądamy tablice, jeżeli w koszyku znajdziemy produkt którego Id jest równe Id podanemu przy odwołaniu do metody zwracamy false, ponieważ taki produkt już jest w koszyku, a przecież nie chcemy ich dublować. (2) Skoro wiemy, że możemy dodać nasz towar do koszyka to tworzymy nową instancję klasy Produkt, (3) a następnie wypełniamy wszystkie zmienne podanymi wcześniej argumentami i zwracamy true co oznacza, że wszystko poszło dobrze.

Możemy już dodawać, produkty jednak nieraz zachodzi potrzeba zmiany czegoś, a więc napiszmy metodę która będzie modyfikować zamówienia.

function updateCart( $intId, $intQuantity = 0, $strType = 0 )
{
// 1
$blnChangeMade = false;
$intSize = sizeof( $this -> arrProduct );
// 2
for( $i = 0; $i < $intSize; $i++ )
{
if ( $this -> arrProduct[$i] -> intId == $intId )
{
// 3
if ( $intQuantity != 0 )
{
$this -> arrProduct[$i] -> intQuantity = $intQuantity;
$blnChangeMade = true;
}
// 4
if ( $strType != 0 )
{
$this -> arrProduct[$i] -> strType = $strType;
$blnChangeMade = true;
}
} // end if
} // end for
return $blnChangeMade;
}

Podobnie jak w poprzedniej funkcji tu również podajemy te same trzy argumenty, z tym, że dwa ostatnie są opcjonalne i w przypadku gdy nie będą podane otrzymają wartość 0. (1) Na początek ustawiamy $blnChangeMade na false oraż sprawdzamy ilość produktów w koszyku. (2) Pętla for przeszukuje całą tablicę, jeżeli znajdzie produkt, którego id jest równe id podanemu przy wywołaniu metody to sprawdza następne warunki. (3) Jeżeli $intQuantity jest różne od 0 to zmieniamy ilość zamówionych produktów na $intQuantity oraz $blnChangeMade ustawiamy na true, co oznacza, że zmiana została dokonana. (4) Tak samo postępujemy dla $strType, na koniec zwracamy $blnChangeMade.

Na koniec zostało nam usuwanie produktów, może od razu zobaczmy kod?

function removeFromCart( $intId = DELETE_ALL )
{
// 1
if ( $intId == DELETE_ALL )
{
unset( $this -> arrProduct );
$this -> arrProduct = array();
}
else
{
$intSize = sizeof( $this -> arrProduct );
// 2
for( $i = 0; $i < $intSize; $i++ )
{
if ( $this -> arrProduct[$i] -> intId == $intId )
{
unset( $this -> arrProduct[$i] );
}
}
}
}

Jak widać funkcja pobiera jeden argument, który jest opcjonalny (warto zwrócić uwagę, że tutaj korzystamy ze wcześniej zdefiniowanej stałej DELETE_ALL). (1) Jeżeli argument nie zostanie podany usuwamy cały koszyk, w przeciwnym wypadku (2) przeglądamy całą tablicę w poszukiwaniu określonego produktu i jeżeli zostanie znaleziony to usuwamy go.

I to już wszystko, zostało jedynie pokazać jak z tego korzystać, co prawda było to już w poprzednim artykule, ale na wszelki wypadek podam jakiś prosty przykład raz jeszcze.

shoppingCart :: create( $objCart );

/**
* Sprawdzamy czy ciastko jest ustawione jezeli tak to nie przesylamy sid-a
* przez get, w przeciwnym razie przesylamy przez get
*/
if ( $objCart -> blnIsCookieSet == true )
{
$strSid = ”;
}
else
{
$strSid = '&sid=’ . $objCart -> strSID;
}

// dodawanie produktow do koszyka
/**
* Jezeli uda sie dodac do koszyka produkt o ID rownym $_GET[’id’]
* to wyswietla informacje o dodaniu produktu w przeciwnym wypadku
* pokazuje informacje o nie dodaniu produktu
*/
if ( $objCart -> addToCart( $_GET[’id’], 1, ” ) )
{
echo 'Produkt zostal dodany.’;
}
else
{
echo 'Produkt nie zostal dodany.’;
}

// usuwanie produktow z koszyka
/**
* Jezeli nie podano $_GET[’id’] to kasowany jest cala zawartosc koszyka
* w przeciwnym wypadku tylko produkt o podanym ID (o ile taki znajduje sie
* w koszyku)
*/
if ( !isset( $_GET[’id’] ) )
{
$objCart -> removeFromCart( DELETE_ALL );
}
else
{
$objCart -> removeFromCart( $_GET[’id’] );
}

// serializuje sesje
$objCart -> unRegister( $objCart );

No cóż na koniec zostaje mi tylko pochwalić się, że skrypt opisany w obydwu artykułach był jedną z trzech nagrodzonych prac w konkursie „Obiektowość dla początkujących” w portalu php.pl, więc mam nadzieję, że ten artykuł pomoże wyjaśnić istotę programowania obiektowego.

Może Cię zainteresować

Sprawdź, jak zostać testerem oprogramowania lub Java developerem! Poznaj kursy online!

Architektura globalnego e-commerce: Jak zbudować sklep gotowy na podbój świata?

Java obchodzi 30. urodziny – język programowania który zmienił świat technologii

Jak zacząć projektować aplikację, nie mając gotowego pomysłu?

Serwer dla małej firmy – czym kierować się przy jego wyborze?

WebInside.pl 2004-07-07 2004-07-07
Udostępnij ten artykuł
Facebook Twitter Kopiuj link Wydrukuj
Udostępnij
Poprzedni artykuł Przodkowie CRM
Następny artykuł Sesje z pomocą ADOdb
Zostaw komentarz lub opinię

Dodaj komentarz Anuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Najnowsze artykuły

Procesor AMD Ryzen 7
Najlepsze procesory z pamięcią 3D V-Cache: Wydajność dla graczy i profesjonalistów
Technologie
Jak przygotować sklep internetowy na automatyzację obsługi klienta?
Artykuły partnerskie
the nvidia logo is displayed on a table
Nvidia przyłapana? Gigant AI chciał kupić miliony pirackich książek
AI Aktualności
Najczęstsze błędy w SMS marketingu: jak nie przepalić budżetu?
E-marketing
4 najczęstsze cyberzagrożenia w przemyśle
Technologie
Jak uratować zaschnięty tusz do drukarki? Skuteczne domowe sposoby i porady
Poradniki
Model 3D jako wspólne źródło danych dla projektu, produkcji i montażu
Artykuły partnerskie
Dlaczego wideo z telefonu sprzedaje na TikToku lepiej niż profesjonalne spoty?
Artykuły partnerskie
Dwa ekrany zawsze pod ręką – zalety korzystania z monitora przenośnego na co dzień
Technologie
Rola nowoczesnych technologii w procesie rehabilitacji
Artykuły partnerskie
banner
Chcesz umieścić swoją reklamę w portalu WebInside.pl?
Skontaktuj się z nami, a zaproponujemy interesujące formy reklamy.
Skontaktuj się

Inne polecane artykuły

Technologie webowe

Sprawdź, jak zostać testerem oprogramowania lub Java developerem! Poznaj kursy online!

5 min czytania
Technologie webowe

Architektura globalnego e-commerce: Jak zbudować sklep gotowy na podbój świata?

7 min czytania
MacBook Pro showing programming language
Technologie webowe

Java obchodzi 30. urodziny – język programowania który zmienił świat technologii

9 min czytania
AktualnościTechnologie webowe

Jak zacząć projektować aplikację, nie mając gotowego pomysłu?

9 min czytania
woman in black top using Surface laptop
Technologie webowe

Serwer dla małej firmy – czym kierować się przy jego wyborze?

5 min czytania
Technologie webowe

Jaki hosting wybrać pod Laravel? Kompleksowy przewodnik dla twórców aplikacji webowych

6 min czytania
programming language
Technologie webowe

Kaskadowość w CSS – wszystko, co musisz wiedzieć

7 min czytania
two women talking while looking at laptop computer
Technologie webowe

Darmowe kreatory stron WWW – stwórz swoją stronę w godzinę

14 min czytania
//

WebInside.pl – portal technologiczny. Aktualności ze świata technologii, webmastering, marketing internetowy, AI, poradniki.

 

Partnerzy

Wszystkie kategorie

  • AI
  • Aktualności
  • Artykuły partnerskie
  • E-marketing
  • e(Biznes)
  • Poradniki
  • Publicystyka
  • Technologie
  • Technologie webowe

Ostatnio dodane

  • Najlepsze procesory z pamięcią 3D V-Cache: Wydajność dla graczy i profesjonalistów
  • Jak przygotować sklep internetowy na automatyzację obsługi klienta?
  • Nvidia przyłapana? Gigant AI chciał kupić miliony pirackich książek
  • Najczęstsze błędy w SMS marketingu: jak nie przepalić budżetu?

Kontakt

Chcesz się z nami skontaktować? Jesteś zainteresowany reklamą lub artykułem sponsorowanym?

Skorzystaj z formularza kontaktowego lub napisz do nas na kontakt@webinside.pl

WebInside.plWebInside.pl
WebInside.pl © 2023 | Mapa strony | Forum | Polityka prywatności
Witaj ponownie!

Zaloguj się do swojego konta

Zapomniałeś hasła?