Detaillierte Erläuterung der Schritte zur Implementierung der Warenkorbfunktion mithilfe des CI-Frameworks

php中世界最好的语言
Freigeben: 2023-03-26 08:12:02
Original
1994 Leute haben es durchsucht

Dieses Mal erkläre ich Ihnen ausführlich die Schritte zur Implementierung der Warenkorbfunktion mithilfe des CI-Frameworks. Welche Vorsichtsmaßnahmen für die Implementierung der Warenkorbfunktion mithilfe des CI-Frameworks gelten Fälle, werfen wir einen Blick darauf.

Im Mall-Projekt ist der Warenkorb ein sehr wichtiger Teil. Lassen Sie den Quellcode hier für Notizen! ! !

Lesen Sie ohne weiteres weiter:

1. Quellcode

<?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;
  }
}
?>
Nach dem Login kopieren

2. Datenbank

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;
Nach dem Login kopieren

CI-Warenkorbzusammenfassung abgeschlossen! ! !

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Detaillierte Erläuterung der Schritte zum Implementieren des Schneidens und Zusammenführens großer Dateien in PHP

Detaillierte Erläuterung von die Implementierung des PHP-Wortgruppierungsalgorithmus

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Schritte zur Implementierung der Warenkorbfunktion mithilfe des CI-Frameworks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage