Re: Shopping Cart Schema - Sessions

From: Date: Wed, 10 Jan 2001 12:42:31 +0000
Subject: Re: Shopping Cart Schema - Sessions
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-33648@lists.php.net to get a copy of this message
Hi Jason! On Wed, 10 Jan 2001, Jason Beebe wrote: > Hey, > > I'm looking for little information from those who have coded their own shopping cart apps. > what would you say the best way to setup a cart would be? more specificly, the method for adding > items to the cart. > eww, lost wrapping ... > say the user is broswing around. when they entered the website a new session was created. when > they go to add an item, what is the best way store variables (such as what they bought and quantity) > in the session. i have read that it is possible to put all of your session variables in a single > associative array. however, i have not had any luck doing this myself. Under such a method of an > array, how would i store each item (product id and quantity, possibly price as well) in the cart > into the session. obviously i don't expect anyone to write an entire app. i am comfortable > starting the session, and doing th db extraction and presentation. i just need to know how to store > a variable in a session (passed through post) and how to extract it when need be (considering it is > an array). Thanks a lot! I codded a shopping cart which allowed thin sessions' and fat sessions'. Thin would mean I store only the IDs, then retrieve the rest of the information about the product from the DB (more DB queries, but smaller session data), while `fat' would mean I store all the data I need to display when the user invetories his/her cart, namely name, price &|short desc., quantity. Some code snippets would be: if (!$SES->isRegistered ('cart.object')) { $CART = new Cart(); $CART->setLanguage (CART_LANGUAGE); $SES->setAttribute ('cart.object', $CART); } $CART = &$SES->getAttribute ('cart.object'); then go ahead and use the cart object: ... $CART->addItem ($sku, 1, new Product($arr_attr)); $CART->dropItem ($sku); And the Product class has among others, these two methods: __setStorageType ($t) { if ($t == CART_FAT_SESS) { $this->_slots = array_keys (get_object_vars ($this)); unset ($this->_slots['_desc']); } } function __sleep () { return (isset ($this->_slots) ? $this->_slots : array ('_quant')); } This is in the manner of Session class from PHPLIB which records what is to be saved in the session (in this case, what attributes.) And the Cart class has: function __wakeup () { if ($this->STORAGE == CART_THIN_SESS) { $pr_attrs = Cart::getItemsAttr (array_keys($this->_items)); foreach ($pr_attrs as $sku => $attrs) { $attrs['quant'] = $this->_items[$sku]->getQuantity(); $this->_items[$sku] = new Product ($attrs); } } } Note that __sleep() and __wakeup() are PHP serialisation hooks, which can customize the marshalling/unmarshalling process (e.g. restore DB connections, etc.) cheers, -- teodor

« previous php.general (#33648) next »