如何管理一个购物车吗
概述
ob娱乐下载Symfony提供了一个插件来管理在电子商务购物车网站。添加一个条目,改变量和显示购物车的内容简单,无痛。
安装
购物车类是不附带的默认安装symfony,但打包成一个插件ob娱乐下载sfShoppingCart
。ob娱乐下载Symfony插件通过梨(中找到更多关于插件的安装第十七章)。
的安装sfShoppingCart
插件是非常简单的,如所描述的插件页面。你只需要在命令行输入:
$ ob娱乐下载symfony插件:安装sfShoppingCartPlugin
然后清除缓存,使半自动的插件的类:
syob娱乐下载mfony cc美元
构造函数
的sfShoppingCart
类的目的是管理购物车。它可以包含任何类型的对象。
构造函数可以声明税率适用于购物车:
my_shopping_cart美元=新sfShoppingCart(sfConfig::得到(“app_cart_tax”));
在这个例子中,购物车税率写在app.yml
应用程序的配置文件,以方便改变:
:车:税:19.6
创建一个用户购物车
你可以很容易地创建一个新的sfShoppingCart
对象的一个动作新
构造函数。然而,它不会被任何使用如果不与一个用户会话。最简单的方法让用户的购物车是选择作文一个sfShoppingCart
对象进sfUser
类。为此,添加一个自定义方法myproject /应用程序/ myapp / lib / myUser.php
类:
类myUser扩展sfUser{公共函数getShoppingCart(){如果(!这个美元- >hasAttribute(“shopping_cart”)){这个美元- >setAttribute(“shopping_cart”,新sfShoppingCart(sfConfig::得到(“app_cart_tax”)));}返回这个美元- >getAttribute(“shopping_cart”);}/ /……}
的$ user - > getShoppingCart ()
方法将创建一个新的购物车如果用户不已经有一个了。
请注意
如果你需要更多的信息覆盖默认的方法sfUser
类通过一个定制的myUser
类,你应该阅读的部分工厂在第十七章。
添加、修改和删除条目
购物车可以包含任意数量的对象从不同的类。每个条目存储在购物车的一个实例sfShoppingCartItem
类。
的sfShoppingCart
类有addItem ()
和deleteItem ()
方法。您可以添加或删除任何类型的对象,这些方法调用的第一个参数是对象的类名。
修改一个条目的数量,第一次得到了sfShoppingCartItem
对象本身(通过getItems ()
的方法sfShoppingCart
对象),并调用它setQuantity ()
方法。
中的shoppingcart模块
这是一个可能的购物车管理模块实现类的对象“产品”(代表产品)可以添加,修改或抑制的行为“添加”,“更新”和“删除”:
类shoppingcartActions扩展sfActions{/ /……公共函数executeIndex(){这个美元- >shopping_cart=shopping_cart美元;这个美元- >项目=shopping_cart美元- >getItems();/ /……}公共函数executeAdd(美元的请求){/ /……如果(美元的请求- >hasParameter(“id”)){美元的产品= ProductPeer::retrieveByPk(美元的请求- >getParameter(“id”));美元的项目=新sfShoppingCartItem(“产品”,美元的请求- >getParameter(“id”));美元的项目- >setQuantity(1);美元的项目- >setPrice(美元的产品- >getPrice());shopping_cart美元=这个美元- >getUser()- >getShoppingCart();shopping_cart美元- >addItem(美元的项目);}/ /……}公共函数executeUpdate(美元的请求){shopping_cart美元=这个美元- >getUser()- >getShoppingCart();foreach(shopping_cart美元- >getItems()作为美元的项目){如果(美元的请求- >hasParameter(“quantity_”。美元的项目- >getId())){美元的项目- >setQuantity(美元的请求- >getParameter(“quantity_”。美元的项目- >getId()));}}/ /……}公共函数executeDelete(美元的请求){如果(美元的请求- >hasParameter(“id”)){shopping_cart美元=这个美元- >getUser()- >getShoppingCart();shopping_cart美元- >deleteItem(“产品”,requets美元- >getParameter(“id”));}/ /……}…}
添加一个条目
让我们更仔细地看看这段代码。
将一个条目添加到购物车,你所说的addItem ()
方法,通过它sfShoppingCartItem
对象。这个对象包含的对象类和独特的id添加商品,添加量和产品的价格。这允许购物车包含的任何类的对象。例如,您可以有一个购物车包含书籍和cd。
价格是储存在这一刻,避免产品之间的价格差异除了付款如果在后台修改产品价格之间的(或者如果购物车之间可以保持会话)。这也使得申请价格折扣根据客户订购数量:
如果(美元的数量>10){美元的项目- >setPrice(美元的产品- >getPrice()*0.8);}其他的{美元的项目- >setPrice(美元的产品- >getPrice());}
问题是你宽松的原来的价格如果你申请折扣。这就是为什么sfShoppingCartItem
对象有setDiscount ()
方法,预计折扣百分比:
如果(美元的数量>10){美元的项目- >setPrice(美元的产品- >getPrice());美元的项目- >setDiscount(20.);}其他的{美元的项目- >setPrice(美元的产品- >getPrice());}
修改一个项目
要改变一个项目的数量,使用方法setQuantity ()
的sfShoppingCartItem
对象。删除一个条目,您可以调用deleteItem ()
通过调用方法或数量更改为0setQuantity (0)
。
如果用户添加同一个项目多次相同(相同的类和id),购物车的数量将会增加项目,而不是添加一个新的:
美元的项目=新sfShoppingCartItem(“产品”,美元的请求- >getParameter(“id”));美元的项目- >setQuantity(1);美元的项目- >setPrice(美元的产品- >getPrice());shopping_cart美元=这个美元- >getUser()- >getShoppingCart();shopping_cart美元- >addItem(美元的项目);shopping_cart美元- >addItem(美元的项目);/ /一样美元的项目=新sfShoppingCartItem(“产品”,美元的请求- >getParameter(“id”));美元的项目- >setQuantity(2);美元的项目- >setPrice(美元的产品- >getPrice());shopping_cart美元=这个美元- >getUser()- >getShoppingCart();shopping_cart美元- >addItem(美元的项目);
最终,你可能想知道为什么更新
操作使用参数如“quantity_2313 = 4”代替“id = 2313冲击= 4”。事实上,这个动作的方式实现允许多个文章的更新数量。
删除整个购物车
要重置购物车,只需调用clear ()
的方法sfShoppingCart
实例。
这个美元- >getUser()- >getShoppingCart()- >清晰的();
在一个模板显示购物车
这个动作shoppingcart /索引
应该显示购物车的内容。让我们看看一个可能的实现。
购物车的内容
三种方法的sfShoppingCart
对象将会帮助你得到一个购物车的内容:
- > getItems ()
:数组的所有sfShoppingCartItem
购物车中的对象- > getItem (class_name, object_id美元)
:一个特定的sfShoppingCartItem
对象- > getTotal ()
:购物车的总金额(总数量*价格每项)
也有一个购物车条目参数持有人。这意味着您可以添加自定义信息的任何项目。
例如,在一个网站,销售汽车配件,sfShoppingCartItem
对象需要存储的对象添加,而且车辆的一部分。这可以简单地通过增加:
美元的项目- >setParameter(“汽车”,vehicle_id美元);
将值传递给模板
为了显示购物车的内容指数
行动必须定义几个变量访问模板:
/ /……这个美元- >shopping_cart=shopping_cart美元;这个美元- >项目=shopping_cart美元- >getItems();
下面的例子显示了一个简单的indexSuccess.php
模板基于迭代所有购物车的物品来显示他们每个人信息:
< ? php如果(shopping_cart美元- >isEmpty()):? >你的购物车空。< ? php其他的:? >< ? phpforeach(美元的物品作为美元的项目):? >< ? php美元的对象=call_user_func(数组(美元的项目- >getClass()。“对等”,“retrieveByPK”),美元的项目- >getId())? >< ? php回声美元的对象- >getLabel()? > < br / >< ? php回声美元的项目- >getQuantity()? > < br / >< ? php回声currency_format(美元的项目- >getPrice(),“欧元”)? >< ? php如果(美元的项目- >getDiscount()):>(- - - - - -< ? php回声美元的项目- >getDiscount()? >%)< ? phpendif;? > < br / >< ? phpendforeach;? >总:< ? php回声currency_format(shopping_cart美元- >getTotal(),“欧元”)? > < br / >< ? phpendif;? >
注意,这个例子使用了推动数据访问层。如果您的项目使用另一个数据访问层,这个例子可能需要适应。
有或没有税
默认情况下,所有操作(添加$ shopping_cart - > addItem ()
,访问$ item - > getPrice ()
和$ shopping_cart - > getTotal ()
使用的价格没有税收。
税收的总额,你必须调用:
total_with_taxes美元=shopping_cart美元- >getTotalWithTaxes()
如果你需要它,sfShoppingCart
对象可以被初始化,这样添加
和得到
方法用含税价格:
类myUser扩展sfUser{公共函数getShoppingCart(){如果(!这个美元- >hasAttribute(“shopping_cart”)){这个美元- >setAttribute(“shopping_cart”,新sfShoppingCart(sfConfig::得到(“app_cart_tax”)));}这个美元- >getAttribute(“shopping_cart”)- >setUnitPriceWithTaxes(sfConfig::得到(“app_cart_withtaxes”));返回这个美元- >getAttribute(“shopping_cart”);}/ /……}
如果sfConfig: get (“app_cart_withtaxes”)
被设置为真正的
,$ shopping_cart - > addItem ()
和$ item - > getPrice ()
方法将使用价格和税收。的getTotal ()
和getTotalWithTaxes ()
方法仍给正确的结果。
再一次,这是一个好习惯保持税收配置在配置文件:这就是为什么上面的示例使用sfConfig: get (“app_cart_withtaxes”)
而不是一个简单的真正的
。的myproject /应用程序/ myapp / config / app.yml
应包含:
:车:税:19.6 withtaxes:真的
如果你不确定的税收处理,问问购物车:
uses_tax美元=shopping_cart美元- >getUnitPriceWithTaxes();
这个工作许可适用创作共用署名下衍生著作3.0 Unported许可执照。