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ć

Jak wybrać agencję do tworzenia strony internetowej w Warszawie?

Lovable – recenzja po 3 miesiącach. Cennik, opinie, kredyty, limity

Stanowisko web developera w 2026: co naprawdę przyspiesza pracę — i za co nie warto przepłacać

AI kontra klasyczne kreatory stron: kto tu naprawdę wygrywa?

Jak wybrać i zarejestrować domenę? Praktyczny przewodnik dla firm i osób prywatnych

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 email nie zostanie opublikowany. Wymagane pola są oznaczone *

Najnowsze artykuły

screen showing bitcoin trading chart
Dobre giełdy kryptowalut – po czym je poznać, zanim wpłacisz pierwsze 100 zł
Artykuły partnerskie
Jak wybrać platformę e-commerce dla rozwijającego się sklepu?
Artykuły partnerskie
man facing three computer monitors while sitting
JetBrains w 2026 roku: jaką licencję wybrać i jak zaoszczędzić na zakupie?
e(Biznes)
Printerio – profesjonalna poligrafia dla firm, które chcą wyglądać dobrze na papierze
Artykuły partnerskie
Reklama jest dobra, a strona, na którą prowadzi, sprzedaje słabo. Pięć kontroli, zanim podniesiesz budżet
Artykuły partnerskie
a blue button with a white arrow on it
5 Best VPS Hosts to Run Telegram Bots 24/7 Without Interruptions
Artykuły partnerskie
Ryczałt 12% czy liniowy z IP Box? Programista na B2B wybiera formę opodatkowania na 2027 rok
Aktualności
Handlowiec na etat czy zewnętrzny zespół? Porównanie kosztów w 2026 roku
Artykuły partnerskie
Aplikacja Bybit – opinie o aplikacji mobilnej Bybit.eu na Androida i iOS
Artykuły partnerskie
Jak zwiększyć rozpoznawalność marki w całym mieście dzięki reklamie na tramwajach
E-marketing
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

Jak wybrać agencję do tworzenia strony internetowej w Warszawie?

3 min czytania

Lovable – recenzja po 3 miesiącach. Cennik, opinie, kredyty, limity

15 min czytania
Technologie webowe

Stanowisko web developera w 2026: co naprawdę przyspiesza pracę — i za co nie warto przepłacać

7 min czytania
a computer screen with the words the easy way to build marketplaces
Technologie webowe

AI kontra klasyczne kreatory stron: kto tu naprawdę wygrywa?

5 min czytania
Technologie webowe

Jak wybrać i zarejestrować domenę? Praktyczny przewodnik dla firm i osób prywatnych

5 min czytania
Technologie webowe

Komentarze w CSS – jak dodawać i do czego służą? Przykłady użycia

17 min czytania
Technologie webowe

Co to jest REST API i na jakich zasadach działa? Przewodnik dla początkujących

21 min czytania
Technologie webowe

Marginesy i dopełnienie w CSS – czym się różnią właściwości margin i padding?

17 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

  • Dobre giełdy kryptowalut – po czym je poznać, zanim wpłacisz pierwsze 100 zł
  • Jak wybrać platformę e-commerce dla rozwijającego się sklepu?
  • JetBrains w 2026 roku: jaką licencję wybrać i jak zaoszczędzić na zakupie?
  • Printerio – profesjonalna poligrafia dla firm, które chcą wyglądać dobrze na papierze

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?