Magento Ajax更新购物车

利用Magento插件:SK_CartUpdate
可以很便捷的实现Magento Ajax更新购物车
的功能。见效果图:

Magento Ajax添加产品效果图

点击向上或向下的箭头会弹出遮罩层Ajax更新购物车的数据。

Magento Ajax更新购物车效果图

之后Magento购物车的数据就顺利Ajax更新完成。

这款Magento购物车Ajax更新插件的下载地址:

Magento Connect Version 1:magento-community/SK_CartUpdate

Magento Connect Version 2:http://connect20.magentocommerce.com/community/SK_CartUpdate

如何使用Magento优惠券Coupon Code

Magento创建购物车价格规则,点击Promotions -> Shopping Cart Price Rule
然后选择 Add New Rule(增加新规则)。(这里便是创建使用Magento优惠券的地方)

比如创建减%10的优惠券:

Rule Information

首先输入规则名Rule Name
和描述Description
。然后选择启用它Status。

然后选择该优惠在哪些页面
上启用。假设给所有店铺的顾客都可以享受10%的优惠。因此我们把所有商店Websites
所有的使用者和顾客类别Customer Groups
都选上。选择的时候按住Ctrl键可以多选。

然后设定此优惠券需要输入优惠码激活,比如Coupon code
设置10Off
,那在购物车页面输入编码10Off
就可以使用了。对“Uses Per Coupon
”和“Uses Per Customer
”进行设定。 “Uses Per Coupon”设定为100,即优惠券只能被使用100次。“Users Per Customer”设定为1,每位顾客只能使用一次优惠。

然后输入优惠券的有效期以及优惠券的优先数值Priority
。设定优先数值为0,即最高优先权。这样当有两个规则同时作用于同一产品的时候,优先权便起作用了。另外From Date
To Date
是用于设置优惠券的有效期。

Public In RSS Feed
这个是设置是否把此个价格规则公布在RSS feed上。

Conditions

选择“Percent of Product Price discount
”( 其他的选择是针对整个购物车或者买x物品可以免费得到y商品两种类别的固定数额的折扣),然后选择你想要设定的折扣额Discount amount
。设定为10 即为%10。

然后我们设定折扣应用于同一商品的最大数Maximum Qty Discount is Applied to

。输入5,也就是说,同一商品只能有5件享受折扣优惠,第6件要按照原价支付了。

接下来是应用折扣所需达到的商品数Discount Qty Step (Buy X)
。如果我们输入3,那么购物车中必需有3样 以上的商品才能享受价格优惠。如果我们对这个要限定的话留空就可以。

接下来你还可以为你的优惠设定免费附送品。附送品可以设定为优惠指定的某些产品,也可以设定为购物车中包括某件商品便可以自由选择的任何产品。这边我们不设置留空。

这样下来整个Magento使用优惠券
购买物品打九折的需求就达到啦。

在前台checkout/cart/页面的Discount Codes里通过输入刚才设定的优惠码10Off
就能打折使用啦。

这只是抛砖引玉,通过更多的研究肯定能把Magento的优惠券功能
发挥得淋漓尽致啊~~

备注 - 关于magento通过url添加到购物车的快捷方法

Magento中可以通过访问Url把产品加入购物车。

1 添加简单产品(Simple Product)

(1) 通过产品id:checkout/cart/add?product=[id]&qty=[qty]

(2) 通过产品sku:$cProd = Mage::getModel(\'catalog/product\'); $id = $cProd->getIdBySku(\"$sku\");

2 添加可配置产品(Configurable Product)

checkout/cart/add?product=[id]&qty=[qty]&super_attribute[attribute_id]=[attribute_id]&super_attribute[attribute_id]=attribute_id

其中attribute_id是产品的super attribute所对应的attribute id

 

(注意:super attribute 和 attribute不同, 在编辑Configurable产品时,在添加简单产品时产品的属性就保存在super attribute表中)。

用于生成添加产品到购物车的url函数:

magento促销方案之 - 购物车内点击赠送礼品

 

今天做了关于magento的另外一种促销方案
:在购物车根据客户购买商品数量赠送等数价格为0的小礼品。

希望目标
:在购物车页面左下角块中显示后台设置的赠品专区里的设定数量的商品,当用户点击某款赠品时,即添加到购物车。(根据用户购买商品数可选等量的赠品)

实现

1,在后台建立一个专门存放价格为0的赠品的目录A。另外,将目录的General Information的Is Active属性设为NO,这样在前台商品目录就不会显示这个赠品目录,但在购物车那边客户读取这个目录的产品。

2,然后向目录A添加几个测试商品a1,a2,a3...,注意在Product Information
把Inventory里的Qty设为大于0、价格设为0、
Stock Availability选项选为In Stock、Websites里的站也要勾上,这样赠品添加完毕。

3,代码修改

a文件: /app/design/frontend/default/beautyard/template/checkout/cart.phtml

头部加上:<script>var x = 0,y=0;</script>

b文件: /app/design/frontend/default/beautyard/template/checkout/cart/crosssell.phtml

也是在头部加上():
<?php
$cartNumbers    = Mage::helper('checkout/cart')->getCart()->getSummaryQty();
$maxGift    = 3;    //控制要显示的赠品数
$categoryIds    = 726;    //网站赠品目录的id
$_productCollection = Mage::getResourceModel('reports/product_collection')
        ->addAttributeToSelect('*')    ->addAttributeToFilter('category_ids',array('finset'=>$categoryIds));
$category     = Mage::getModel('catalog/category');
$category->load($categoryIds);
$collection     = $category->getProductCollection();
foreach ($collection as $product) {
    $result[]     = $product->getId();
}
?>
<div id="cartGift" name="cartGift" class="box-others-also-like">
<ul>
<?php
if(count($result)>$maxGift){
    $ourneed = array_rand($result,$maxGift);
    foreach($ourneed as $cc){
    $thisproduct= Mage::getModel('catalog/product')->load($result[$cc]);
?>
    <li>
    <a href="/checkout/cart/add?product=<?php echo $result[$cc]; ?>&qty=1" title="<?php echo $thisproduct->getName(); ?>" ><?php echo $thisproduct->getName(); ?></a>
    </li>
<?php
    }
} ?>
</ul>
</div>
<div id="cartGiftTips" name="cartGiftTips">choose over</div>
<script>(x<=y)?($('cartGift').hide()&&$('cartGiftTips').show()):($('cartGift').show()&&$('cartGiftTips').hide())</script>

c文件:/app/design/frontend/default/beautyard/template/checkout/cart/item/default.phtml

160行左右加上:
<?php if($_item->getCalculationPrice()>0):?>
    <script>x+=<?php echo $this->getQty();?>;</script>
<?php else: ?>
    <script>y+=<?php echo $this->getQty();?>;</script>
<?php endif; ?>
接着更改之后的td:
    <td class="a-center">
        <input name="cart[<?php echo $_item->getId() ?>][qty]" value="<?php echo $this->getQty() ?>" size="4" title="<?php echo $this->__('Qty') ?>" class="input-text qty" maxlength="12"<?php if($_item->getCalculationPrice()==0):?>readonly<?php endif; ?>
/>
    </td>

OK!到此关于magento购物车赠品促功能完毕!

PHP购物车类

 <?
// 购物车类 

/*
使用说明:
构造函数 cart 可以使用参数:
cart($cartname = 'myCart', $session_id = '', $savetype = 'session', $cookietime = 86400, $cookiepath = '/', $cookiedomain = '')
$cartname 是购物车的标识,可以指定,可以保证不重名,不会有相关冲突
$session_id 是 session_id,默认是使用 cookie 来传输,也可以自定义,如果存储类型是 session 才起效
$savetype 存储类型,有 session 和 cookie 方式
... 其他是 cookie 需要的参数

如果程序本身也需要使用 session,建议购物车使用 cookie 存储




添加一个商品
============================================================
// 引用类
require_once './cart.class.php';
// 建立类实例
$cart = new cart();

// 商品已经存在 修改数据
if ($cart->data[$id]) {
$cart->data[$id]['count'] += $count;
$cart->data[$id]['money'] += $cart->data[$id]['price'] * $count;
// 添加商品
} else {
$cart->data[$id]['name'] = $name;
$cart->data[$id]['price'] = $price;
$cart->data[$id]['count'] = $count;
$cart->data[$id]['money'] = $price * $count;
}
// 保存购物车数据
$cart->save();
============================================================



编辑一个商品数量
============================================================
// 引用类
require_once './cart.class.php';
// 建立类实例
$cart = new cart();

// 商品已经存在 修改数据
if ($cart->data[$id]) {
$cart->data[$id]['count'] = $count;
$cart->data[$id]['money'] = $cart->data[$id]['price'] * $count;

// 保存购物车数据
$cart->save();
}
============================================================



删除一个商品
============================================================
// 引用类
require_once './cart.class.php';
// 建立类实例
$cart = new cart();

// 删除商品
unset($cart->data[$id]);

// 保存购物车数据
$cart->save();
============================================================



列表购物车
============================================================
// 引用类
require_once './cart.class.php';
// 建立类实例
$cart = new cart();

foreach ($cart->data AS $k => $v) {
echo '商品 ID: '.$k;
echo '商品名称: '.$v['name'];
echo '商品单价: '.$v['price'];
echo '商品数量: '.$v['count'];
echo '商品总价: '.$v['money'];
}
============================================================



某字段总累计 --- 如所有商品总价格
============================================================
// 引用类
require_once './cart.class.php';
// 建立类实例
$cart = new cart();

// 累计 money 字段
$cart->sum('money')
============================================================



清空购物车
============================================================
// 引用类
require_once './cart.class.php';
// 建立类实例
$cart = new cart();

// 清除数据
unset($cart->data);

// 保存购物车数据
$cart->save();
============================================================
*/


class cart {

// 购物车标识
var $cartname = '';
// 存储类型
var $savetype = '';
// 购物车中商品数据
var $data = array();
// Cookie 数据
var $cookietime = 0;
var $cookiepath = '/';
var $cookiedomain = '';

// 构造函数 (购物车标识, $session_id, 存储类型(session或cookie), 默认是一天时间, $cookiepath, $cookiedomain)
function cart($cartname = 'myCart', $session_id = '', $savetype = 'session', $cookietime = 86400, $cookiepath = '/', $cookiedomain = '') {

// 采用 session 存储
if ($savetype == 'session') {

if (!$session_id && $_COOKIE[$cartname.'_session_id']) {
session_id($_COOKIE[$cartname.'_session_id']);
} elseif($session_id)
session_id($session_id);

session_start();

if (!$session_id && !$_COOKIE[$cartname.'_session_id'])
setcookie($cartname.'_session_id', session_id(), $cookietime + time(), $cookiepath, $cookiedomain);
}

$this->cartname = $cartname;
$this->savetype = $savetype;
$this->cookietime = $cookietime;
$this->cookiepath = $cookiepath;
$this->cookiedomain = $cookiedomain;
$this->readdata();
}

// 读取数据
function readdata() {
if ($this->savetype == 'session') {
if ($_SESSION[$this->cartname] && is_array($_SESSION[$this->cartname]))
$this->data = $_SESSION[$this->cartname];
else 
$this->data = array();
} elseif ($this->savetype == 'cookie') {
if ($_COOKIE[$this->cartname])
$this->data = unserialize($_COOKIE[$this->cartname]);
else 
$this->data = array();
}

}

// 保存购物车数据
function save() {
if ($this->savetype == 'session') {
$_SESSION[$this->cartname] = $this->data;
} elseif ($this->savetype == 'cookie') {
if ($this->data)
setcookie($this->cartname, serialize($this->data), $this->cookietime + time(), $this->cookiepath, $this->cookiedomain);
}
}

// 返回商品某字段累加
function sum($field) {

$sum = 0;
if ($this->data)
foreach ($this->data AS $v)
if ($v[$field])
$sum += $v[$field] + 0;

return $sum;
}

}
?>

标签: php, , 购物车