# 购物车
购物车功能的实现思路:
可以将购物车看成是一个类,在数据库中创建购物车表,往购物车添加商品的时候相当于在表中插入一条数据
需要注意的是:添加商品的时候需要记录是哪个人添加的商品,这时候,微信提供接口可以直接获取用户信息。
获取用户信息步骤:在项目的domain中加入Subscriber.groovy和SubscriberCookie.groovy两个类,在controller中加入SubscriberPortalController.groovy类。
在conf目录下配置BuildConfig,在Plugins节点下加入:
compile ':cookie:0.51'
在repositories节点下修改为:
inherits true // Whether to inherit repository definitions from plugins
grailsPlugins()
grailsHome()
grailsCentral()
mavenLocal()
mavenCentral()
grailsRepo "https://grails.org/plugins"
// uncomment these (or add new ones) to enable remote dependency resolution from public Maven repositories
mavenRepo "http://snapshots.repository.codehaus.org"
mavenRepo "http://repository.codehaus.org"
mavenRepo "http://download.java.net/maven/2/"
mavenRepo "http://repository.jboss.com/maven2/"
配置完成之后,只需要在需要调用用户的信息的方法调用beforeIntercetor方法就可以得到用户信息:

beforeInterceptor()方法是固有名称的方法,加入类中表示在执行实际操作的方法之前先执行beforeInterceptor方法。
购物车的表现形式是以网页打开的,所以不要与第三方服务器交互,我们在后台编写的时候只需要创建一个控制器类,得到所有的购物车信息并与数据库进行交互。
In Grails, whenever you want a new page you just create a new controller action for it.
在显示网页之前需要得到购物车的所有信息,所以创建showCartController,定义showCart()方法。根据用户的信息取得该用户的所有的购买水果的详情。
def li = ShopCart.findAllBySubscriber(subscriber)
在gsp页面使用《g:each>进行循环遍历单个水果的信息。购物车的物品有添加数量和删除该水果的操作,则使用form表单进行提交,controller表示提交到哪一个控制器来处理表单数据,action表示控制器中的实现的方法

如果购物车中的商品信息太多的话,页面显示不宜过长,则需要进行分页显示。分页功能:
def max = params.int('max')?params.int('max') : 2 //页面显示的最多的条数
params.max = max
def offset = params.int('offset')?params.int('offset'):0 //偏移量
def total = offset+max
//当offset大于总的商品数目的时候,直接显示最后一页的数据
if(offset>li.size()){
offset = (total/max)*max
}
if(total>=li.size()){
total = li.size()
}
[li:li.subList(offset, total), showCartTotal: li.size()]
在gsp页面的显示为:

## 购物车结算功能:
实现的基本步骤:根据text框中填写的数据,取得对应得水果价格,先计算出购买的每一种水果的价格,总价格为每一种水果的价格总和。
在实现数量加减的时候,就计算每一种水果购买需要的金额。所以在jia()和jian()函数里面进行操作。
计算金额 = 数量*单价,在gsp页面可以已知水果的单价,只要获取水果的数量就可以的。

在gsp页面是循环输出每一种水果的信息,要得到不同的水果和价格。所以在script中通过document.getElementById的时候,页面传入的id要为不同的id值,才能取到不同的水果。id是唯一值
