• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php实现仿写CodeIgniter的购物车类_php技巧

php 搞代码 3年前 (2022-01-26) 51次浏览 已收录 0个评论

本文实例讲述了php实现仿写CodeIgniter的购物车类。分享给大家供大家参考。具体如下:

这里仿写CodeIgniter的购物车类

购物车基本功能:

1) 将物品加入购物车
2) 从购物车中删除物品
3) 更新购物车物品信息 【+1/-1】
4) 对购物车物品进行统计
1. 总项目
2. 总数量
3. 总金额
5) 对购物单项物品的数量及金额进行统计
6) 清空购物车

cart.php文件如下:



_cart_contents = $_SESSION['cart_contents'];  } else {   $this->_cart_contents['cart_total'] = 0;   $this->_cart_contents['total_items'] = 0;  }  if($this->debug === TRUE) {   //$this->_log("cart_create_success");  } } /**  * 将物品加入购物车  *  * @access public  * @param array 一维或多维数组,必须包含键值名:       id -> 物品ID标识,       qty -> 数量(quantity),       price -> 单价(price),       name -> 物品姓名  * @return bool  */ public function insert($items = array()) {  //输入物品参数异常  if( ! is_array($items) OR count($items) == 0) {   if($this->debug === TRUE) {    $this->_log("cart_no_items_insert");   }   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;     }    }   }  }  //当插入成功后保存数据到session  if($save_cart) {   $this->_save_cart();   return TRUE;  }  return FALSE; } /**  * 更新购物车物品信息  *  * @access public  * @param array  * @return bool  */ public function update($items = array()) {  //输入物品参数异常  if( !is_array($items) OR count($items) == 0) {   if($this->debug === TRUE) {    $this->_log("cart_no_items_insert");   }   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;     }    }   }  }  //当更新成功后保存数据到session  if($save_cart) {   $this->_save_cart();   return TRUE;  }  return FALSE; } /**  * 获取购物车物品总金额  *  * @return int  */ public function total() {  return $this->_cart_contents['cart_total']; } /**  * 获取购物车物品种类  *  * @return int  */ public function total_items() {  return $this->_cart_contents['total_items']; } /**  * 获取购物车  *  * @return array  */ public function contents() {  return $this->_cart_contents; } /**  * 获取购物车物品options  *  * @param string  * @return array  */ public function options($rowid = '') {  if($this->has_options($rowid)) {   return $this->_cart_contents[$rowid]['options'];  } else {   return array();  } } /**  * 清空购物车  *  */ public function destroy() {  unset($this->_cart_contents);  $this->_cart_contents['cart_total'] = 0;  $this->_cart_contents['total_items'] = 0;  unset($_SESSION['cart_contents']); } /**  * 判断购物车物品是否有options选项  *   * @param string  * @return bool  */ private function has_options($rowid = '') {  if( ! isset($this->_cart_contents[$rowid]['options']) OR count($this->_cart_contents[$rowid]['options']) === 0) {   return FALSE;  }  return TRUE; } /**  * 插入数据  *  * @access private   * @param array  * @return bool  */ private function _insert($items = array()) {  //输入物品参数异常  if( ! is_array($items) OR count($items) == 0) {   if($this->debug === TRUE) {    $this->_log("cart_no_data_insert");   }   return FALSE;  }  //如果物品参数无效(无id/qty/price/name)  if( ! isset($items['id']) OR ! isset($items['qty']) OR ! isset($items['price']) OR ! isset($items['name'])) {   if($this->debug === TRUE) {    $this->_log("cart_items_data_invalid");   }   return FALSE;  }  //去除物品数量左零及非数字字符  $items['qty'] = trim(preg_replace('/([^0-9])/i', '', $items['qty']));  $items['qty'] = trim(preg_replace('/^([0]+)/i', '', $items['qty']));  //如果物品数量为0,或非数字,则我们对购物车不做任何处理!  if( ! is_numeric($items['qty']) OR $items['qty'] == 0) {   if($this->debug === TRUE) {    $this->_log("cart_items_data(qty)_invalid");   }   return FALSE;  }  //物品ID正则判断  if( ! preg_match('/^['.$this->product_id_rule.']+$/i', $items['id'])) {   if($this->debug === TRUE) {    $this->_log("cart_items_data(id)_invalid");   }   return FALSE;  }  //物品名称正则判断  if( ! preg_match('/^['.$this->product_name_rule.']+$/i', $items['name'])) {   if($this->debug === TRUE) {    $this->_log("cart_items_data(name)_invalid");   }   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'])) {   if($this->debug === TRUE) {    $this->_log("cart_items_data(price)_invalid");   }   return FALSE;  }  //生成物品的唯一id  if(isset($items['options']) AND count($items['options']) >0) {   $rowid = md5($items['id'].implode('', $items['options']));  } else {   $rowid = md5($items['id']);  }  //加入物品到购物车  unset($this->_cart_contents[$rowid]);  $this->_cart_contents[$rowid]['rowid'] = $rowid;  foreach($items as $key => $val) {   $this->_cart_contents[$rowid][$key] = $val;  }  return TRUE; } /**  * 更新购物车物品信息(私有)  *  * @access private  * @param array  * @return bool  */ private function _update($items = array()) {  //输入物品参数异常  if( ! isset($items['rowid']) OR ! isset($items['qty']) OR ! isset($this->_cart_contents[$items['rowid']])) {   if($this->debug == TRUE) {    $this->_log("cart_items_data_invalid");   }   return FALSE;  }  //去除物品数量左零及非数字字符  $items['qty'] = preg_replace('/([^0-9])/i', '', $items['qty']);  $items['qty'] = preg_replace('/^([0]+)/i', '', $items['qty']);  //如果物品数量非数字,对购物车不做任何处理!  if( ! is_numeric($items['qty'])) {   if($this->debug === TRUE) {    $this->_log("cart_items_data(qty)_invalid");   }   return FALSE;  }  //如果购物车物品数量与需要更新的物品数量一致,则不需要更新  if($this->_cart_contents[$items['rowid']]['qty'] == $items['qty']) {   if($this->debug === TRUE) {    $this->_log("cart_it<b style="color:transparent">(、本文来源gao@!dai!ma.com搞$$代^@码网*</b><i>搞gaodaima代码</i>ems_data(qty)_equal");   }   return FALSE;  }  //如果需要更新的物品数量等于0,表示不需要这件物品,从购物车种清除  //否则修改购物车物品数量等于输入的物品数量  if($items['qty'] == 0) {   unset($this->_cart_contents[$items['rowid']]);  } else {   $this->_cart_contents[$items['rowid']]['qty'] = $items['qty'];  }  return TRUE; } /**  * 保存购物车数据到session  *   * @access private  * @return bool  */ private function _save_cart() {  //首先清除购物车总物品种类及总金额  unset($this->_cart_contents['total_items']);  unset($this->_cart_contents['cart_total']);  //然后遍历数组统计物品种类及总金额  $total = 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']);   //每种物品的总金额   $this->_cart_contents[$key]['subtotal'] = ($val['price'] * $val['qty']);  }  //设置购物车总物品种类及总金额  $this->_cart_contents['total_items'] = count($this->_cart_contents);  $this->_cart_contents['cart_total'] = $total;  //如果购物车的元素个数少于等于2,说明购物车为空  if(count($this->_cart_contents) _cart_contents;  return TRUE; } /**  * 日志记录  *  * @access private  * @param string  * @return bool  */ private function _log($msg) {  return @file_put_contents('cart_err.log', $msg, FILE_APPEND); }}/*End of file cart.php*//*Location /htdocs/cart.php*/

cart_demo.php文件如下:

 array(   'id' => 'sp001',   'qty' => 20,   'price' => '10.50',   'name' => 'a002',   'options' => array(       'made' => 'china',       'company' => 'bgi'       )   ),   1 => array(   'id' => 'sp002',   'qty' => 1,   'price' => '3.50',   'name' => 'b002'   )  );$arr = array(   'rowid' => '86dbb7cb58a667558b4bbb1f60330028',   'qty' => 21  );$cart = new Cart();$cart->insert($items);//var_dump($cart->contents());$cart->update($arr);var_dump($cart->contents());//$cart->destroy();//var_dump($_SESSION['cart_contents']);/*end of php*/

希望本文所述对大家的php程序设计有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php实现仿写CodeIgniter的购物车类_php技巧

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址