瀏覽代碼

将我的收藏缓存到SESSION中

stanley-king 8 年之前
父節點
當前提交
15d4bcd0ce

+ 3 - 0
helper/account_helper.php

@@ -12,6 +12,7 @@ require_once (BASE_ROOT_PATH . '/helper/model_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/push_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/push_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/sms_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/sms_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/bonus/parameters.php');
 require_once (BASE_ROOT_PATH . '/helper/bonus/parameters.php');
+require_once (BASE_ROOT_PATH . '/helper/user_session/favorite.php');
 
 
 class account_helper
 class account_helper
 {
 {
@@ -392,6 +393,8 @@ class account_helper
     public static function onLogin($member_id)
     public static function onLogin($member_id)
     {
     {
         relation_helper::onLogin($member_id);
         relation_helper::onLogin($member_id);
+        $favorate = new user_session\favorite();
+        $favorate->onLogin();
     }
     }
 
 
     public static function onEvaluate($member_id)
     public static function onEvaluate($member_id)

+ 4 - 1
helper/goods_helper.php

@@ -11,6 +11,7 @@ require_once (BASE_ROOT_PATH . '/helper/activity_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/goods/commonid_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/goods/commonid_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/predeposit_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/predeposit_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/brand_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/brand_helper.php');
+require_once (BASE_ROOT_PATH . '/helper/user_session/favorite.php');
 
 
 class goods_helper
 class goods_helper
 {
 {
@@ -129,10 +130,12 @@ class goods_helper
         $related_goods = [];
         $related_goods = [];
         $summary_list = [];
         $summary_list = [];
         $sort_summarys = [];
         $sort_summarys = [];
+
+        $favorate = new user_session\favorite();
         foreach ($goods_list as $goods)
         foreach ($goods_list as $goods)
         {
         {
             $summary = new goods_summary($goods);
             $summary = new goods_summary($goods);
-            $info = $summary->format($act_type,$act_id);
+            $info = $summary->format($act_type,$act_id,$favorate);
             $goods_id = intval($goods['goods_id']);
             $goods_id = intval($goods['goods_id']);
             $sort_summarys[$goods_id] = $info;
             $sort_summarys[$goods_id] = $info;
 
 

+ 0 - 12
helper/model/goods_common.php

@@ -140,7 +140,6 @@ class goods_common extends common_base
     private $goods_list;
     private $goods_list;
     private $goods_ids;
     private $goods_ids;
     private $show_gid;
     private $show_gid;
-    private $favored;
 
 
     public function __construct($common_info,$goods_list,$show_gid)
     public function __construct($common_info,$goods_list,$show_gid)
     {
     {
@@ -194,18 +193,7 @@ class goods_common extends common_base
         $ret = array_merge($base_info,$spec);
         $ret = array_merge($base_info,$spec);
         $ret['images'] = $this->goods_images();
         $ret['images'] = $this->goods_images();
         $ret['show_goods'] = $this->show_gid;
         $ret['show_goods'] = $this->show_gid;
-        $ret['favored'] = $this->favored;
 
 
         return $ret;
         return $ret;
     }
     }
-    private function has_favored()
-    {
-        $mod_fav = Model('favorites');
-        $favorites_info = $mod_fav->getOneFavorites(array('fav_id' => $this->commonid, 'fav_type' => 'goods', 'member_id' => $_SESSION['member_id']));
-        if (empty($favorites_info)) {
-            return false;
-        } else {
-            return true;
-        }
-    }
 }
 }

+ 2 - 1
helper/model/goods_summary.php

@@ -77,7 +77,7 @@ class goods_summary
         return ($add_time > $start || $edit_time > $start);
         return ($add_time > $start || $edit_time > $start);
     }
     }
 
 
-    public function format(&$act_type, &$act_id)
+    public function format(&$act_type, &$act_id,user_session\favorite $favorate)
     {
     {
         $summary = [];
         $summary = [];
 
 
@@ -168,6 +168,7 @@ class goods_summary
             $summary['gap_desc'] = "";
             $summary['gap_desc'] = "";
         }
         }
         $summary['earn_bonus'] = $config['bonus_gap']['earn_bonus'];
         $summary['earn_bonus'] = $config['bonus_gap']['earn_bonus'];
+        $summary['favored'] = $favorate->favored_goods($this->goods_id);
 
 
         return $summary;
         return $summary;
     }
     }

+ 0 - 9
helper/session_helper.php

@@ -262,13 +262,4 @@ class session_helper
 
 
         return $ar_contact;
         return $ar_contact;
     }
     }
-
-    static public function favored($favor_type,$favor_id)
-    {
-
-    }
-    static public function add_favorite($favor_type,$favor_id)
-    {
-
-    }
 }
 }

+ 126 - 0
helper/user_session/favorite.php

@@ -0,0 +1,126 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/4/5
+ * Time: 下午10:46
+ */
+
+namespace user_session;
+
+require_once (BASE_ROOT_PATH . '/helper/algorithm.php');
+
+use algorithm;
+
+class favorite
+{
+    static $stTypes = array('goods','brand');
+
+    private $mBrands;
+    private $mGoods;
+    private $mDirty;
+
+    public function __construct()
+    {
+        $this->mBrands = [];
+        $this->mGoods = [];
+        $this->mDirty = false;
+
+        if(isset($_SESSION['favorite']))
+        {
+            if(isset($_SESSION['favorite']['brands'])) {
+                $this->mBrands = $_SESSION['favorite']['brands'];
+            }
+            if(isset($_SESSION['favorite']['goods'])) {
+                $this->mGoods = $_SESSION['favorite']['goods'];
+            }
+        }
+    }
+    public function __destruct()
+    {
+        if($this->mDirty) {
+            $_SESSION['favorite']['brands'] = $this->mBrands;
+            $_SESSION['favorite']['goods']  = $this->mGoods;
+        }
+    }
+
+    public function onLogin()
+    {
+        $this->mBrands = [];
+        $this->mGoods = [];
+        $this->mDirty = true;
+
+        $mod_favorites = Model('favorites');
+        $favorites  = $mod_favorites->getGoodsFavoritesList(array('member_id' => $_SESSION['member_id']));
+
+        foreach ($favorites as $item)
+        {
+            if($item['fav_type'] == 'goods') {
+                $this->mGoods[] = intval($item['fav_id']);
+            }
+            elseif($item['fav_type'] == 'brand') {
+                $this->mBrands[] = intval($item['fav_id']);
+            }
+            else {
+                continue;
+            }
+        }
+        sort($this->mBrands);
+        sort($this->mGoods);
+    }
+
+    public function add($type,$id)
+    {
+        $id = intval($id);
+        if($type == 'brand')
+        {
+            if(algorithm::binary_search($this->mBrands,$id) == false) {
+                $pos = algorithm::lower_bonud($this->mBrands,$id);
+                algorithm::array_insert($this->mBrands,$pos,$id);
+                $this->mDirty  = true;
+            }
+        }
+        elseif($type == 'goods')
+        {
+            if(algorithm::binary_search($this->mGoods,$id) == false) {
+                $pos = algorithm::lower_bonud($this->mGoods,$id);
+                algorithm::array_insert($this->mGoods,$pos,$id);
+                $this->mDirty  = true;
+            }
+        }
+    }
+
+    public function del($type,$id)
+    {
+        $id = intval($id);
+        if($type == 'brand')
+        {
+            if(algorithm::binary_search($this->mBrands,$id) == true) {
+                $pos = algorithm::lower_bonud($this->mBrands,$id);
+                algorithm::array_erase($this->mBrands,$pos);
+                $this->mDirty  = true;
+            }
+        }
+        elseif($type == 'goods')
+        {
+            if(algorithm::binary_search($this->mGoods,$id) == false) {
+                $pos = algorithm::lower_bonud($this->mGoods,$id);
+                algorithm::array_erase($this->mGoods,$pos);
+                $this->mDirty  = true;
+            }
+        }
+    }
+
+    public function favored_goods($goods_id)
+    {
+        $goods_id = intval($goods_id);
+        return algorithm::binary_search($this->mGoods,$goods_id);
+    }
+
+    public function favored_brand($brand_id)
+    {
+        $brand_id = intval($brand_id);
+        return algorithm::binary_search($this->mBrands,$brand_id);
+    }
+}
+

+ 1 - 0
mobile/control/login.php

@@ -95,6 +95,7 @@ class loginControl extends mobileHomeControl
         $model_member->createSession($member_info);
         $model_member->createSession($member_info);
         Model('cart')->mergecart($member_info, $_SESSION['store_id']);
         Model('cart')->mergecart($member_info, $_SESSION['store_id']);
         Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
         Model('goods_browse')->mergebrowse($_SESSION['member_id'], $_SESSION['store_id']);
+
         account_helper::onLogin($_SESSION['member_id']);
         account_helper::onLogin($_SESSION['member_id']);
         session::instance()->set_cookie($_SESSION['MPHPSESSID']);
         session::instance()->set_cookie($_SESSION['MPHPSESSID']);
         return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));
         return self::outsuccess(array('member_id' => $_SESSION['member_id'],'HPHPSESSID' => $_SESSION['MPHPSESSID']));

+ 9 - 1
mobile/control/member_favorites.php

@@ -14,6 +14,7 @@ defined('InShopNC') or exit('Access Invalid!');
 
 
 require_once (BASE_ROOT_PATH . '/helper/goods_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/goods_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/special_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/special_helper.php');
+require_once (BASE_ROOT_PATH . '/helper/user_session/favorite.php');
 
 
 class member_favoritesControl extends mbMemberControl
 class member_favoritesControl extends mbMemberControl
 {
 {
@@ -120,8 +121,11 @@ class member_favoritesControl extends mbMemberControl
                 if($fav_type == 'goods') {
                 if($fav_type == 'goods') {
                     $mod_goods = Model('goods');
                     $mod_goods = Model('goods');
                     $mod_goods->editGoodsById(array('goods_collect' => array('exp', 'goods_collect + 1')), array($fav_id));
                     $mod_goods->editGoodsById(array('goods_collect' => array('exp', 'goods_collect + 1')), array($fav_id));
+                    $favorate = new user_session\favorite();
+                    $favorate->add('goods',$fav_id);
                 } else {
                 } else {
-
+                    $favorate = new user_session\favorite();
+                    $favorate->add('brand',$fav_id);
                 }
                 }
 
 
                 return self::outsuccess(null);
                 return self::outsuccess(null);
@@ -140,12 +144,16 @@ class member_favoritesControl extends mbMemberControl
             return self::outerr(errcode::ErrParamter,"参数错误");
             return self::outerr(errcode::ErrParamter,"参数错误");
         }
         }
 
 
+        $favorate = new user_session\favorite();
+        $favorate->del($fav_type,$fav_id);
+
         $model_favorites = Model('favorites');
         $model_favorites = Model('favorites');
         $ret = $model_favorites->delFavorites(array('fav_id' => $fav_id,'fav_type' => $fav_type, 'member_id' => $_SESSION['member_id']));
         $ret = $model_favorites->delFavorites(array('fav_id' => $fav_id,'fav_type' => $fav_type, 'member_id' => $_SESSION['member_id']));
         if($ret == false) {
         if($ret == false) {
             return self::outerr(errcode::ErrParamter,"该收藏不存在或者已经被删除.");
             return self::outerr(errcode::ErrParamter,"该收藏不存在或者已经被删除.");
         }
         }
         else {
         else {
+
             return self::outsuccess(array('fav_id' => $fav_id));
             return self::outsuccess(array('fav_id' => $fav_id));
         }
         }
     }
     }