PHP購物車種,移植於CodeIgniter

來源:互聯網
上載者:User
PHP購物車類,移植於CodeIgniter

session('cart_contents') !== FALSE){$this->_cart_contents = $this->session('cart_contents');}else{// 初始化資料$this->_cart_contents['cart_total'] = 0;$this->_cart_contents['total_items'] = 0;}}// --------------------------------/** * 添加到購物車 * * @accesspublic * @paramarray * @returnbool */function insert($items = array()){// 檢測資料是否正確if ( ! is_array($items) OR count($items) == 0){return FALSE;}// 可以添加一個商品(一維數組),也可以添加多個商品(二維數組)$save_cart = FALSE;if (isset($items['id'])){if ($this->_insert($items) == TRUE){$save_cart = TRUE;}}else{foreach ($items as $val){if (is_array($val) AND isset($val['id'])){if ($this->_insert($val) == TRUE){$save_cart = TRUE;}}}}// 更新資料if ($save_cart == TRUE){$this->_save_cart();return TRUE;}return FALSE;}// --------------------------------/** * 處理插入購物車資料 * * @accessprivate * @paramarray * @returnbool */function _insert($items = array()){// 檢查購物車if ( ! is_array($items) OR count($items) == 0){return FALSE;}// --------------------------------/* 前四個數組索引 (id, qty, price 和name) 是 必需的。   如果缺少其中的任何一個,資料將不會被儲存到購物車中。   第5個索引 (options) 是可選的。當你的商品包含一些相關的選項資訊時,你就可以使用它。   請使用一個數組來儲存選項資訊。注意:$data['price'] 的值必須大於0    如:$data = array(               'id'      => 'sku_123ABC',               'qty'     => 1,               'price'   => 39.95,               'name'    => 'T-Shirt',               'options' => array('Size' => 'L', 'Color' => 'Red')            );*/if ( ! isset($items['id']) OR ! isset($items['qty']) OR ! isset($items['price']) OR ! isset($items['name'])){return FALSE;}// --------------------------------// 數量驗證,不是數字替換為空白$items['qty'] = trim(preg_replace('/([^0-9])/i', '', $items['qty']));// 數量驗證$items['qty'] = trim(preg_replace('/(^[0]+)/i', '', $items['qty']));// 數量必須是數字或不為0if ( ! is_numeric($items['qty']) OR $items['qty'] == 0){return FALSE;}// --------------------------------// 產品ID驗證if ( ! preg_match("/^[".$this->product_id_rules."]+$/i", $items['id'])){return FALSE;}// --------------------------------// 驗證產品名稱,考慮到漢字,暫不使用/*if ( ! preg_match("/^[".$this->product_name_rules."]+$/i", $items['name'])){return FALSE;}*/// --------------------------------// 價格驗證$items['price'] = trim(preg_replace('/([^0-9\.])/i', '', $items['price']));$items['price'] = trim(preg_replace('/(^[0]+)/i', '', $items['price']));// 驗證價格是否是數值if ( ! is_numeric($items['price'])){return FALSE;}// --------------------------------// 屬性驗證,如果屬性存在,屬性值+產品ID進行加密儲存在$rowid中if (isset($items['options']) AND count($items['options']) > 0){$rowid = md5($items['id'].implode('', $items['options']));}else{// 沒有屬性時直接對產品ID加密$rowid = md5($items['id']);}// 檢測購物車中是否有該產品,如果有,在原來的基礎上加上本次新增的商品數量$_contents = $this->_cart_contents;$_tmp_contents = array();foreach ($_contents as $val){if (is_array($val) AND isset($val['rowid']) AND isset($val['qty']) AND $val['rowid']==$rowid){$_tmp_contents[$val['rowid']]['qty'] = $val['qty'];} else {$_tmp_contents[$val['rowid']]['qty'] = 0;}}// --------------------------------// 清除原來的資料unset($this->_cart_contents[$rowid]);// 重新賦值$this->_cart_contents[$rowid]['rowid'] = $rowid;// 添加新項目foreach ($items as $key => $val){if ($key=='qty' && isset($_tmp_contents[$rowid][$key])) {$this->_cart_contents[$rowid][$key] = $val+$_tmp_contents[$rowid][$key];} else {$this->_cart_contents[$rowid][$key] = $val;}}return TRUE;}// --------------------------------/** * 更新購物車 *  * @accesspublic * @paramarray * @paramstring * @returnbool */function update($items = array()){// 驗證if ( ! is_array($items) OR count($items) == 0){return FALSE;}$save_cart = FALSE;if (isset($items['rowid']) AND isset($items['qty'])){if ($this->_update($items) == TRUE){$save_cart = TRUE;}}else{foreach ($items as $val){if (is_array($val) AND isset($val['rowid']) AND isset($val['qty'])){if ($this->_update($val) == TRUE){$save_cart = TRUE;}}}}if ($save_cart == TRUE){$this->_save_cart();return TRUE;}return FALSE;}// --------------------------------/** * 處理更新購物車 * * @accessprivate * @paramarray * @returnbool */function _update($items = array()){if ( ! isset($items['qty']) OR ! isset($items['rowid']) OR ! isset($this->_cart_contents[$items['rowid']])){return FALSE;}// 檢測數量$items['qty'] = preg_replace('/([^0-9])/i', '', $items['qty']);if ( ! is_numeric($items['qty'])){return FALSE;}if ($this->_cart_contents[$items['rowid']]['qty'] == $items['qty']){return FALSE;}if ($items['qty'] == 0){unset($this->_cart_contents[$items['rowid']]);}else{$this->_cart_contents[$items['rowid']]['qty'] = $items['qty'];}return TRUE;}// --------------------------------/** * 儲存購物車到Session裡 * * @accessprivate * @returnbool */function _save_cart(){unset($this->_cart_contents['total_items']);unset($this->_cart_contents['cart_total']);$total = 0;$items = 0;foreach ($this->_cart_contents as $key => $val){if ( ! is_array($val) OR ! isset($val['price']) OR ! isset($val['qty'])){continue;}$total += ($val['price'] * $val['qty']);$items += $val['qty'];$this->_cart_contents[$key]['subtotal'] = ($this->_cart_contents[$key]['price'] * $this->_cart_contents[$key]['qty']);}$this->_cart_contents['total_items'] = $items;$this->_cart_contents['cart_total'] = $total;if (count($this->_cart_contents) <= 2){$this->session('cart_contents', array());return FALSE;}$this->session('cart_contents',$this->_cart_contents);return TRUE;}// --------------------------------/** * 購物車中的總計金額 * * @accesspublic * @returninteger */function total(){return $this->_cart_contents['cart_total'];}// --------------------------------/** * 購物車中總共的項目數量 * * * @accesspublic * @returninteger */function total_items(){return $this->_cart_contents['total_items'];}// --------------------------------/** * 購物車中所有資訊的數組 * * 返回一個包含了購物車中所有資訊的數組 * * @accesspublic * @returnarray */function contents(){$cart = $this->_cart_contents;unset($cart['total_items']);unset($cart['cart_total']);return $cart;}// --------------------------------/** * 購物車中是否有特定的列包含選項資訊 * * 如果購物車中特定的列包含選項資訊,本函數會返回 TRUE(布爾值),本函數被設計為與 contents() 一起在迴圈中使用 * * @accesspublic * @returnarray */function has_options($rowid = ''){if ( ! isset($this->_cart_contents[$rowid]['options']) OR count($this->_cart_contents[$rowid]['options']) === 0){return FALSE;}return TRUE;}// --------------------------------/** * 以數組的形式返回特定商品的選項資訊 * * 本函數被設計為與 contents() 一起在迴圈中使用 * * @accesspublic * @returnarray */function product_options($rowid = ''){if ( ! isset($this->_cart_contents[$rowid]['options'])){return array();}return $this->_cart_contents[$rowid]['options'];}// --------------------------------/** * 格式化數值 * * 返回格式化後帶小數點的值(小數點後有2位),一般價格使用 * * @accesspublic * @returninteger */function format_number($n = ''){if ($n == ''){return '';}$n = trim(preg_replace('/([^0-9\.])/i', '', $n));return number_format($n, 2, '.', ',');}// --------------------------------/** * 銷毀購物車 * * 這個函數一般是在處理完使用者訂單後調用 * * @accesspublic * @returnnull */function destroy(){unset($this->_cart_contents);$this->_cart_contents['cart_total'] = 0;$this->_cart_contents['total_items'] = 0;$this->session('cart_contents', array());}// --------------------------------/** * 儲存Session * * 須有session_start(); * * @accessprivate * @returnbool */function session($name = 'cart_contents',$value = NULL) {if ($name=='') $name = 'cart_contents';if ($value == NULL) {return @$_SESSION[$name];} else {if (!empty($value) && is_array($value)) {$_SESSION[$name] = $value;return TRUE;} else {return FALSE;}}}}?>
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.