CodeIgniter 프레임워크를 기반으로 장바구니 기능을 구현하는 방법

不言
풀어 주다: 2023-04-01 08:06:01
원래의
1468명이 탐색했습니다.

본 글에서는 주로 CI(CodeIgniter) 프레임워크를 기반으로 장바구니 기능을 구현하는 방법을 소개하며, CodeIgniter 프레임워크의 장바구니 기능 클래스에 대한 정의와 데이터베이스 구축을 위한 관련 SQL 명령어를 예제 형식으로 분석합니다. 도움이 필요한 친구들은 이 글의 예시를 참고하세요

CI(CodeIgniter) 프레임워크를 기반으로 장바구니 기능을 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

쇼핑몰 프로젝트에서 장바구니는 매우 중요한 부분입니다. 메모를 위해 여기에 소스 코드를 남겨주세요! ! !

더 이상 고민하지 말고 아래를 살펴보겠습니다.

1. 소스 코드

<?php
defined(&#39;BASEPATH&#39;) OR exit(&#39;No direct script access allowed&#39;);
class cart extends Home_Controller {
  private $info = array();    #前台提交数据
  private $specData = array();  #规格信息
  private $prodData = array();  #货品组合信息
  private $cartData = array();  #购物车入库数据
  /**
   * 构造函数
   */
  public function __construct()
  {
    parent::__construct();
    $this->load->model(&#39;goodsModel&#39;,&#39;goods&#39;);
    $this->load->model(&#39;productModel&#39;,&#39;product&#39;);
    $this->load->model(&#39;goodsAttrModel&#39;,&#39;goodsAttr&#39;);
  }
  /**
   * [购物车]数据添加
   */
  public function cartAdd()
  {
    #接收购物车提交数据
    $this->info = $this->input->post();
  // $this->ajaxReturn($this->info);
    #1.验证商品库存、货品库存
    $this->checkGoodsNumber();
    #2.查询规格名称、价格
    $this->getSpecData();
    #3.组装购物车添加de数据
    $cartData = $this->setCartData();
  p(json_decode($this->input->cookie(&#39;cart&#39;),true));
    # 一、判断是否登录
    if(!UID){
      //未登录 数据存入Cookie中
      //1:获取cookie中的购物车数据
      $cookieCartData = $this->input->cookie(&#39;cart&#39;);
      //2:判断cookie中数据是否为空
      if(empty($cookieCartData)){
        //2-1:为空则表示用户没有添加过购物车
        //2-1-1.设置Key-->生成购物车数据
        $key = $cartData[&#39;goods_id&#39;].&#39;-&#39;.$cartData[&#39;product_id&#39;];
        $cookieCart = array($key => $cartData);
        //2-1-2.设置购物车返回值(商品数量、总价)
        $this->setCartReturn(1,$cartData[&#39;goods_price&#39;]);
        //2-1-3.设置Cookie存储购物车数据
      }else{
        //2-2:不为空 表示用户添加过购物车
        //2-2-1.追加购物数据
        $cookieCart = $this->addCartData($cartData,json_decode($cookieCartData,true));
        //2-2-2.设置购物车返回值(商品数量、总价)
        $this->setCartReturn(count($cookieCart),array_sum(array_column($cookieCart, &#39;goods_price&#39;)));
      }
      //3:设置Cookie存储购物车数据
      setCookie(&#39;cart&#39;,json_encode($cookieCart),LEFT_TIME,&#39;/&#39;);
    }else{
      //已登录 数据存入数据库
    }
    //返回购物车提示数据
    $this->ajaxReturn($this->msg);
  }
  /**
   * 验证商品库存
   */
  public function checkGoodsNumber()
  {
    $this->goods->map = array(
      &#39;goods_id&#39;     =>  $this->info[&#39;goods_id&#39;],
      &#39;goods_number >=&#39;  => $this->info[&#39;buy_number&#39;],
    );
    $this->goods = $this->goods->find(&#39;goods_id,goods_name,goods_sn,goods_img,shop_price&#39;);
    if(!$this->goods){
      $this->msg[&#39;msg&#39;] = "商品库存不足";
      $this->ajaxReturn($this->msg);
    }
    #验证货品库存
    $this->product->map = array(
      &#39;goods_id&#39;     =>  $this->info[&#39;goods_id&#39;],
      &#39;product_attr&#39;   =>  $this->info[&#39;prod_attr&#39;],
      &#39;product_number >=&#39; => $this->info[&#39;buy_number&#39;],
    );
    $this->prodData = $this->product->find();
    if(!$this->prodData){
      $this->msg[&#39;msg&#39;] = "货品库存不足";
      $this->ajaxReturn($this->msg);
    }
    return true;
  }
  /**
   * 组合规格名称、价格
   */
  public function getSpecData()
  {
    $this->goodsAttr->map = inToType(explode("|", $this->info[&#39;prod_attr&#39;]),&#39;goods_attr_id&#39;);
    $goodsAttrInfo = $this->goodsAttr->select(&#39;goods_attr_value,goods_attr_price&#39;);
    $this->specData[&#39;product_attr_value&#39;] = implode("|", array_column($goodsAttrInfo, &#39;goods_attr_value&#39;));
    $this->specData[&#39;product_price&#39;] = array_sum(array_column($goodsAttrInfo,&#39;goods_attr_price&#39;));
    # 返回规格信息 $this->specData
  }
  /**
   * 组装购物车添加的数组
   */
  public function setCartData()
  {
    $this->cartData = array(
      &#39;product_id&#39;  =>  $this->prodData[&#39;product_id&#39;],
      &#39;product_attr&#39; =>  $this->prodData[&#39;product_attr&#39;],
      &#39;buy_number&#39;  =>  $this->info[&#39;buy_number&#39;],
      &#39;goods_price&#39;  =>  $this->info[&#39;shop_price&#39;],
      &#39;goods_sum&#39;   =>  $this->info[&#39;shop_price&#39;] * $this->info[&#39;buy_number&#39;],
      &#39;product_price&#39; =>  &#39;&#39;,
      &#39;product_attr_value&#39;  =>  &#39;&#39;,
      &#39;uid&#39;      =>  UID,
    );
    $this->cartData = array_merge($this->cartData,$this->goods);
    #若存在规格【添加规格信息】
    if(!empty($this->info[&#39;prod_attr&#39;])){
      $this->cartData[&#39;product_price&#39;] = $this->specData[&#39;product_price&#39;];
      $this->cartData[&#39;product_attr_value&#39;] = $this->specData[&#39;product_attr_value&#39;];
    }
    return $this->cartData;
    # 购物车 添加的总数据 $this->cartData;
  }
  /**
   * 设置购物车返回提示数据
   * @param [商品数量,总价]
   */
  public function setCartReturn($number,$prices)
  {
    $this->msg[&#39;code&#39;] = self::STATUS_ON;
    $this->msg[&#39;data&#39;] = array(
        &#39;number&#39;  =>  $number,
        &#39;prices&#39;  =>  $prices,
    );
  }
  /**
   * 购物车 新添加数据
   * @param [新数据,原购物车数据]
   */
  public function addCartData($newData,$oldData)
  {
    #组合Key
    $key = $newData[&#39;goods_id&#39;].&#39;-&#39;.$newData[&#39;product_id&#39;];
    // #判断购物车中是否有该商品
    if(isset($oldData[$key])){
      //1.有 合并商品数量、价格
      $oldData[$key][&#39;buy_number&#39;] = $oldData[$key][&#39;buy_number&#39;] + $newData[&#39;buy_number&#39;];
      $oldData[$key][&#39;goods_price&#39;] = $newData[&#39;goods_price&#39;];
      $oldData[$key][&#39;goods_sum&#39;] = $oldData[$key][&#39;buy_number&#39;] * $oldData[$key][&#39;goods_price&#39;];
    }else{
      //2.没有 追加新商品
      $oldData[$key] = $newData;
    }
    #返回购物车数据
    return $oldData;
  }
}
?>
로그인 후 복사

2. 데이터베이스

CREATE TABLE `shop_goods` (
 `goods_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `goods_name` varchar(255) NOT NULL,
 `type_id` int(11) DEFAULT NULL,
 PRIMARY KEY (`goods_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
CREATE TABLE `shop_product` (
 `product_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `goods_id` int(11) NOT NULL,
 `goods_price` decimal(10,2) NOT NULL,
 `goods_num` int(11) NOT NULL,
 `goods_sn` varchar(50) NOT NULL,
 `goods_attr_id` varchar(100) NOT NULL,
 PRIMARY KEY (`product_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
CREATE TABLE `shop_goods_attr` (
 `goods_attr_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `goods_id` int(11) NOT NULL,
 `attr_id` int(11) NOT NULL,
 `attr_value` varchar(255) NOT NULL,
 PRIMARY KEY (`goods_attr_id`)
) ENGINE=InnoDB AUTO_INCREMENT=126 DEFAULT CHARSET=utf8;
로그인 후 복사

CI 쇼핑 자동차가 정리되어 있어요! ! !

위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

CodeIgniter를 사용하여 Alipay 인터페이스 호출을 개발 및 구현하는 방법

CI 프레임워크를 기반으로 한 WeChat 웹 페이지 인증 라이브러리 분석

위 내용은 CodeIgniter 프레임워크를 기반으로 장바구니 기능을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿