喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

上一主题 下一主题
 18  2/2  <  1  2 
     
标题: [原创] 购物车类的设计  
  本主题被作者加入到他/她的 Blog 中  
 
php5
金牌会员
Rank: 6Rank: 6
中级会员


UID 62897
精华 0
积分 1236
帖子 1088
金钱 1236 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2005-1-3
来自 福建
状态 离线


QUOTE:
原帖由 LuckLrj 于 2006-9-14 02:46 PM 发表
我都存cookie里,显示的时候再查表,这样不管用户怎么选择,添加,删除商品,前端js操作cookie,
最后提交的时候才向服务器发送商品列表,这样前端,后端分开,很好维护。
有可能禁用 cookie
2006-9-14 03:02 PM#11
查看资料  发短消息  顶部
 
shoujipeixun
乞丐




UID 80702
精华 0
积分 -4
帖子 14
金钱 -4 喜悦币
威望 0
人脉 0
阅读权限 1
注册 2006-9-28
状态 离线
[推荐阅读] 男孩儿与男人的八个区别
顶上去!!!!!
2006-10-9 05:48 PM#12
查看资料  发短消息  顶部
 
fnet
高级会员
Rank: 4
**村大队书记



UID 65788
精华 0
积分 717
帖子 784
金钱 717 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2005-8-12
状态 离线
[推荐阅读] 算算 你现在的身价值多少钱
一般还是存session吧,现在用cookie的地方少了



JAVA
2007-10-15 10:50 AM#13
查看资料  访问主页  发短消息  QQ  顶部
 
路人郝
新手上路
Rank: 1



UID 86240
精华 0
积分 36
帖子 34
金钱 36 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-1-13
状态 离线
[推荐阅读] 关于数据库导出问题
学习了,谢谢楼主



PHP是什么
2007-12-13 10:18 AM#14
查看资料  发短消息  顶部
 
psdshow
金牌会员
Rank: 6Rank: 6
论坛元老



UID 30908
精华 0
积分 1758
帖子 1363
金钱 1758 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2004-9-6
来自 永州-廣州
状态 离线
[推荐阅读] adodb or pear or mysqli
学习了
呵呵




以下AD由PHPX赞助:
广州梦莎五金饰品厂 东莞恒隆五金饰品厂 承接php私活
2007-12-13 10:58 AM#15
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
changxiaob
注册会员
Rank: 2


UID 92575
精华 0
积分 69
帖子 126
金钱 69 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2007-5-6
状态 离线
[推荐阅读] php的乱码问题:
ZENCART的购物车怎么样啊?
2007-12-13 02:39 PM#16
查看资料  Blog  发短消息  顶部
 
fnet
高级会员
Rank: 4
**村大队书记



UID 65788
精华 0
积分 717
帖子 784
金钱 717 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2005-8-12
状态 离线
[推荐阅读] 为什么我的IF语句没起作用呢?
购物车是最典型的Session应用实例

个人更推荐对象式的写法:
/**
* 产品模型类
*/
class Model_ProductBean {
    var $id = 0; //id
    var $price = 0; // 单价
    var $name = null; //名城
    var $count = 1; //数量

    function setId( $id ) {
        $this->id = $id;
    }

    function getId() {
        return $this->id;
    }

    function setPrice( $price ) {
        $this->price = $price;
    }

    function getPrice() {
        return $this->price;
    }

    function setName( $name ) {
        $this->name = $name;
    }

    function getName() {
        return $this->name;
    }

    function setCount( $count ) {
        $this->count = $count;
    }

    /**
     * 获取商品数量
     *
     * @return int
     */
    function getCount() {
        return $this->count;
    }

    /**
     * 获取产品总价格
     *
     * @return double
     */
    function getTotalPrice() {
        return $this->count * $this->price;
    }
}

/**
* 对SESSION数据进行添加、删除、修改、统计
*
*/

class Helper_Cart {
   
    var $catName;

    function Helper_Cart( $catName = "" ) {
        if ($catName == "")
            $this->catName = "cat";
        else
            $this->catName = $catName;
    }

    /**
     * 检测产品是否存在
     *
     * @param int $id
     * @return boolean true/false
     */
    function checkProductExsist( $id ) {
        
        if ( 1 > count($_SESSION[$this->catName]) ) {
            return false;
        }
        
        foreach ($_SESSION[$this->catName] as $key=>$val) {
            if ($key == $id) {
                return true;
            }
        }
        return false;
    }

    /**
     * 保存一个产品对象
     *
     * @param Object(Model_Product) $oProdcut
     * @return int 产品个数
     */
    function setProduct( $id , $oProdcut ) {
        if ( !$this->checkProductExsist( $id ) ) {
            $_SESSION[$this->catName][$id] = $oProdcut;
            return 1;
        }
        
        $currentProduct = $_SESSION[$this->catName][$id];
        $currentCount = $currentProduct->getCount()+1;
        $currentProduct->setCount( $currentCount );
        return $currentCount;
    }

    /**
     * 根据产品id删除一个系列的产品
     *
     * @param int $id/-1 删除成功,返回删除id,删除不成功,返回-1
     */
    function removeProduct( $id ) {
        if ( $this->checkProductExsist($id) ) {
            unset( $_SESSION[$this->catName][$id] );
            return $id;
        } else {
            return -1;
        }
    }

    /**
     * 根据产品id删除一个产品
     *
     * @param int $id/-1 删除成功,返回删除的产品的id,没有这个商品,返回-1,商品正好为1个,则清楚这个id的商品 。
     */
    function decreaseProduct($id) {
        if ( !$this->checkProductExsist($id) ) {
            return -1 ;
        }

        $currentProduct = $_SESSION[$this->catName][$id];
        $currentCount = $currentProduct->getCount();


        if ($currentCount == 1) {
            unset($_SESSION[$this->catName][$id]);
            return $id;
        }

        $currentProduct->setCount( $currentCount-1 );
        return $id;
    }
   
    /**
     * 清空整个购物车
     *
     */
    function cleanCat() {
        if (isset($_SESSION[$this->catName])) {
            unset( $_SESSION[$this->catName] );
        }
        return true;
    }
   
    /**
     * 获取产品对象
     *
     * @param int $id
     * @return Object(Model_Product)
     */
    function getProduct( $id ) {
        return $_SESSION[$this->catName][$id];
    }
}

$oProduct1 = new Model_ProductBean();
$oProduct1->setId(1);
$oProduct1->setName("wazi");
$oProduct1->setPrice(123.00);

$oCat = new Helper_Cart();
$oCat->setProduct(1,$oProduct1);

$oProduct2 = new Model_ProductBean();
$oProduct2->setId(2);
$oProduct2->setName("toujing");
$oProduct2->setPrice(15.00);

$oCat->setProduct(2,$oProduct2);


$oProduct3 = new Model_ProductBean();
$oProduct3->setId(3);
$oProduct3->setName("xiezi");
$oProduct3->setPrice(23.00);

$oCat->setProduct(3,$oProduct3);

//$oCat->decreaseProduct(1);


$oProdcut = $oCat->getProduct(1);
$oProdcut2 = $oCat->getProduct(2);
$oProdcut3 = $oCat->getProduct(3);

echo $oProdcut->getTotalPrice()."\r\n";
echo $oProdcut2->getTotalPrice()."\r\n";
echo $oProdcut3->getTotalPrice()."\r\n";

print_r($_SESSION);




JAVA
2007-12-14 06:18 PM#17
查看资料  访问主页  发短消息  QQ  顶部
 
迷茫
新手上路
Rank: 1



UID 100067
精华 0
积分 2
帖子 13
金钱 2 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-10-27
状态 离线
[推荐阅读] 怎样把连续空格变成一个空格?
写的好清楚阿 很方便 谢谢
2008-1-7 10:09 AM#18
查看资料  发短消息  顶部
 18  2/2  <  1  2 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.033652 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP