商城购物车逻辑思路
这个是商城购物车逻辑思路,做个记录也是乐于分享!大家相互交流学习
电子商城加入购物车的设计流程
1.判断用户是否登录,如果用户登录采用Db存储商品(即采用数据库的方式存购物车中的商品),如果是用户未登录(即采用Cookie的方式存购物车中的商品,并且采用加密方式)
2.用户在点击购买按钮的时候,有可能是买的是单品,也有可能买的是组合套餐。从而得到点击按钮传过来的参数要么是商品的id,要么就是组合套餐的id号,同时带有商品数量。
3.对于单品来说,先判断商品此时是否处于促销时间,所以通过id首先得判断是否是促销产品,更新商品价格,然后在判断是否是限时折扣,再次更新商品价格,最后再检查库存是不是为空,购买的数量是否大于库存。对于一些虚拟产品、如F码、预售产品最好不要加入在购物车中(因为这些要么是可以直接发货,要么是需要过一段时间才能发货,对于这类产品建议直接购买,禁止加入购物车中)。
4.对于组合套餐来说,需要判断此时商品是否在组合套装中,在判断组合套餐中的每个商品是否有库存,计算组合套餐的总价格,加入购物车的时候只放组合套餐的一个商品在购物车中,同时把组合套餐id放进去,方便以后再购物车页面把组合套餐中的其他商品查询出来。
实例:/**<br>
* 添加购物车<br>
*/<br>
public function add() {<br>
$model_goods = M('goods');<br>
$logic_buy = D('buy','Logic');<br>
if (is_numeric($_GET['goods_id'])) {<br>
<br>
//商品加入购物车(默认)<br>
$goods_id = intval($_GET['goods_id']); //商品id<br>
$num= intval($_GET['num']); //商品数量<br>
if ($goods_id
//通过id获取商品的基本信息,如名称,价格,属性等(每个商城的数据库大概都是差不多的)<br>
$goods_info = $model_goods->getGoodsInfoById($goods_id);<br>
//抢购,这里就是对于如果商品处于抢购活动中,更新商品的价格,这里用的是传指针的方式,所以没有返回变量<br>
$logic_buy->getGroupbuyInfo($goods_info);<br>
<br>
//限时折扣,对于限时折扣活动,也是更新商品的价格<br>
$logic_buy->getXianshiInfo($goods_info,$quantity);<br>
//这里就检查库存是不是充足,有没有超拍,是不是虚拟商品或者预售商品<br>
$this->_check_goods($goods_info,$num);<br>
<br>
} elseif (is_numeric($_GET['bid'])) {//这里传入的是组合套餐的id号<br>
<br>
//优惠套装加入购物车(单套)<br>
if (!$_SESSION['member_id']) {<br>
$this->error('请选登录');exit();<br>
}<br>
$bid= intval($_GET['bid']);<br>
if ($bid
$model_bl = M('bundling');<br>
$bl_info = $model_bl->getBundlingInfo(array('bid'=>$bid)); //这里很简单就是通过组合套餐ID吧组合套餐的信息查出来,活动是否处于开启状态<br>
if (empty($bl_info) || $bl_info['bl_state'] == '0') {<br>
$this->error('该优惠套装已不存在,建议您单独购买');<br>
}<br>
<br>
//检查每个商品是否符合条件,并重新计算套装总价<br>
$bl_goods_list = $model_bl->getBundlingGoodsList(array('bl_id'=>$bl_id));<br>
$goods_id_array = array();<br>
$bl_amount = 0;<br>
foreach ($bl_goods_list as $goods) {<br>
$goods_id_array[] = $goods['goods_id'];<br>
$bl_amount += $goods['bl_goods_price'];<br>
}<br>
$model_goods = M('goods');<br>
$goods_list = $model_goods->getGoodsInfoById($goods_id_array);<br>
foreach ($goods_list as $goods) {<br>
$this->_check_goods($goods,1);<br>
}<br>
<br>
//优惠套装作为一条记录插入购物车,图片取套装内的第一个商品图<br>
$goods_info = array();<br>
$goods_info['goods_id'] = $goods_list[0]['goods_id'];<br>
$goods_info['goods_name'] = $bl_info['bl_name'];<br>
$goods_info['goods_price'] = $bl_amount;<br>
$goods_info['goods_num'] = 1;<br>
$goods_info['goods_image'] = $goods_list[0]['goods_image'];<br>
$goods_info['store_name'] = $bl_info['store_name'];<br>
$goods_info['bl_id'] = $bid;<br>
$num= 1; //组合套餐中的每个商品的数量都只有一个<br>
}<br>
<br>
//已登录状态,存入数据库,未登录时,存入COOKIE<br>
if($_SESSION['member_id']) {<br>
$save_type = 'db';<br>
$goods_info['buyer_id'] = $_SESSION['member_id'];<br>
} else {<br>
$save_type = 'cookie';<br>
}<br>
$model_cart = M('cart');<br>
$insert = $model_cart->addCart($goods_info,$save_type,$num);<br>
if ($insert) {<br>
//购物车商品种数记入cookie<br>
setNcCookie('cart_goods_num',$model_cart->cart_goods_num,2*3600);<br>
$data = array('state'=>'true', 'num' => $model_cart->cart_goods_num, 'amount' => ncPriceFormat($model_cart->cart_all_price));<br>
} else {<br>
$data = array('state'=>'false');<br>
}<br>
exit(json_encode($data));<br>
}<br>
<br>
/**<br>
* 检查商品是否符合加入购物车条件<br>
* @param unknown $goods<br>
* @param number $quantity<br>
*/<br>
private function _check_goods($goods_info, $num) {<br>
if(empty($num)) {<br>
exit(json_encode(array('msg'=>'商品数量错误')));<br>
}<br>
if(empty($goods_info)) {<br>
exit(json_encode(array('msg'=>'商品不存在')));<br>
}<br>
if(intval($goods_info['goods_storage'])
exit(json_encode(array('msg'=>'商品库存不足')));<br>
}<br>
if(intval($goods_info['goods_storage'])
exit(json_encode(array('msg'=>'购买数量超过库存')));<br>
}<br>
if ($goods_info['is_virtual'] || $goods_info['is_fcode'] || $goods_info['is_presell']) {<br>
exit(json_encode(array('msg'=>'该商品不允许加入购物车,请直接购买','UTF-8')));<br>
}<br>
}<br>
在function.php中加入两个函数<br>
/**<br>
* 价格格式化<br>
*<br>
* @param int $price<br>
* @return string $price_format<br>
*/<br>
function ncPriceFormat($price) {<br>
$price_format = number_format($price,2,'.','');<br>
return $price_format;<br>
}<br>
/**<br>
* 设置cookie<br>
* 这个加密方式是我上一篇文章里面写了的<br>
* @param string $name cookie 的名称<br>
* @param string $value cookie 的值<br>
* @param int $expire cookie 有效周期<br>
* @param string $path cookie 的服务器路径 默认为 /<br>
* @param string $domain cookie 的域名<br>
* @param string $secure 是否通过安全的 HTTPS 连接来传输 cookie,默认为false<br>
*/<br>
function setNcCookie($name, $value, $expire='3600', $path='', $domain='', $secure=false){<br>
if (empty($path)) $path = '/';<br>
if (empty($domain)) $domain = SUBDOMAIN_SUFFIX ? SUBDOMAIN_SUFFIX : '';<br>
$name = defined('COOKIE_PRE') ? COOKIE_PRE.$name : strtoupper(substr(md5(MD5_KEY),0,4)).'_'.$name;<br>
$expire = intval($expire)?intval($expire):(intval(SESSION_EXPIRE)?intval(SESSION_EXPIRE):3600);<br>
$result = setcookie($name, $value, time()+$expire, $path, $domain, $secure);<br>
$_COOKIE[$name] = $value;<br>
}
AD:真正免费,域名+虚机+企业邮箱=0元

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











入門コード例で Python プログラミングについて学ぶ Python は、習得が簡単でありながら強力なプログラミング言語です。初心者にとって、Python プログラミングの入門コード例を理解することは非常に重要です。この記事では、すぐに始めるのに役立つ具体的なコード例をいくつか紹介します。 Print HelloWorldprint("HelloWorld") これは、Python の最も単純なコード例です。 print()関数は、指定された内容を出力するために使用されます。

PHP 変数はプログラムの実行中に値を保存し、動的でインタラクティブな WEB アプリケーションを構築するために重要です。この記事では、PHP 変数を詳しく説明し、10 個の実際の例を使用して実際に動作する様子を示します。 1. ユーザー入力の保存 $username=$_POST["username"];$passWord=$_POST["password"]; この例では、フォーム送信からユーザー名とパスワードを抽出し、その後の処理のために変数に保存します。 2. 構成値 $database_host="localhost";$database_username="username";$database_pa を設定します。

タイトル: 初心者から熟練者まで: Go 言語で一般的に使用されるデータ構造のコード実装 データ構造はプログラミングにおいて重要な役割を果たし、プログラミングの基礎です。 Go 言語には、一般的に使用されるデータ構造が多数あり、これらのデータ構造の実装をマスターすることは、優れたプログラマーになるために重要です。この記事では、Go 言語で一般的に使用されるデータ構造を紹介し、読者がこれらのデータ構造を使い始めて習熟するのに役立つ、対応するコード例を示します。 1. 配列 配列は基本的なデータ構造であり、同じ型のグループです。

PHP を使用して在庫管理システムの在庫管理機能コードを記述する方法 在庫管理は多くの企業にとって不可欠な部分です。複数の倉庫を持つ企業にとって、在庫管理機能は特に重要です。在庫を適切に管理および追跡することで、企業は異なる倉庫間で在庫を割り当て、運用コストを最適化し、コラボレーション効率を向上させることができます。この記事では、PHP を使用して在庫倉庫管理機能のコードを記述する方法を紹介し、関連するコード例を示します。 1. 在庫倉庫管理機能のコードを書き始める前に、データベースを確立します。

「Go 言語プログラミングの例: Web 開発におけるコード例」 インターネットの急速な発展に伴い、Web 開発はさまざまな業界で不可欠な部分になりました。 Go 言語は、強力な機能と優れたパフォーマンスを備えたプログラミング言語として、Web 開発の開発者にますます好まれています。この記事では、読者が Go 言語をより深く理解し、Go 言語を使用して独自の Web アプリケーションを構築できるように、具体的なコード例を通じて Web 開発に Go 言語を使用する方法を紹介します。 1. シンプルな HTTP サーバー まず、

Java バブル ソートの最も簡単なコード例 バブル ソートは一般的な並べ替えアルゴリズムであり、その基本的な考え方は、並べ替える順序を、隣接する要素の比較と交換を通じて順序付けされた順序に徐々に調整することです。次に、バブル ソートの実装方法を示す簡単な Java コード例を示します。 publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

Huawei クラウド エッジ コンピューティング相互接続ガイド: インターフェイスを迅速に実装するための Java コード サンプル IoT テクノロジーの急速な発展とエッジ コンピューティングの台頭により、ますます多くの企業がエッジ コンピューティングのアプリケーションに注目し始めています。 Huawei Cloud はエッジ コンピューティング サービスを提供し、企業に信頼性の高いコンピューティング リソースと便利な開発環境を提供し、エッジ コンピューティング アプリケーションの実装を容易にします。この記事では、Java コードを通じて Huawei Cloud エッジ コンピューティング インターフェイスを迅速に実装する方法を紹介します。まずは開発環境を準備する必要があります。 Java Development Kit がインストールされていることを確認してください (

Java 選択ソート方法のコード記述ガイドと例 選択ソートは、シンプルで直観的なソート アルゴリズムです。そのアイデアは、ソートされていない要素から毎回最小 (または最大) の要素を選択し、すべての要素がソートされるまで交換することです。この記事では、選択項目の並べ替えのためのコード作成ガイドを提供し、特定の Java サンプル コードを添付します。アルゴリズム原理 選択ソートの基本原理は、ソート対象の配列をソート済み部分とソートされていない部分の 2 つの部分に分割し、その都度、未ソート部分から最小 (または最大) の要素が選択され、ソート済み部分の最後に配置されます。上記を繰り返します
