【问题标题】:How would you go to "design" a cart within a Zend Framework project?您将如何在 Zend Framework 项目中“设计”购物车?
【发布时间】:2011-07-15 09:18:19
【问题描述】:
我很了解 ZF,并且对 Magento 有一点了解,但我是电子商务新手,我确信在设计购物车模型时可以遵循最佳实践。
如何设计购物车?
我想到了两个模型,Model_Cart 和 Model_Cart_Item 与 Zend_Session 结合使用以在会话中存储购物车。
你有什么反馈?
你会怎么做呢?关于编写购物车系统我应该知道什么?
请注意,我需要一个简单的系统,我什至不需要处理数量
【问题讨论】:
标签:
php
oop
zend-framework
software-design
【解决方案1】:
如果您的模型很容易序列化,您可以简单地将它们添加到会话数据中,例如
// storage
$cartNamespace = new Zend_Session_Namespace('cart');
$cartNamespace->cart = $cart; // $cart is a Model_Cart with items
// retrieval
$cartNamespace = new Zend_Session_Namespace('cart');
if (isset($cartNamespace->cart) {
$cart = $cartNamespace->cart;
}
POPO(Plain Old PHP Objects)很容易序列化。如果您的模型包含任何特定于运行时的属性(数据库连接、文件句柄等),您应该实现 Serializable 接口来处理任何复杂性。
您还可以考虑将模型数据存储在数据库中。有一些关于购物车数据存储的 SO 讨论可以帮助您做出决定。
【解决方案2】:
你在正确的轨道上。
我建议创建一个控制器动作助手类来协助完成这项任务。这将使您的控制器代码不那么笨重。这是一个很好的tutorial about action helpers。
给辅助类一些基本的方法:
$this->_helper->card->add($product, $qty);
$this->_helper->card->remove($product);
$this->_helper->card->getItems();
类似的东西。
我应该知道关于写一个
购物车系统?
更多的是结帐部分...
适用于美国。如果您的营业地点与用户所在州相同,则客户必须纳税。例如。如果您的企业在佛罗里达州注册,并且客户是佛罗里达州居民,则客户必须纳税,但纽约州的客户则不需要。
【解决方案3】:
创建 Cart 和 Cart_Item 类。 Cart 类应包含用于添加和删除 Cart_Items 的方法,这些方法存储为 Cart 类中的数组。还要创建一个将购物车状态序列化到会话中的保存方法,我也喜欢使用标准 Zend_Db_Table_Abstract 模型将购物车序列化到数据库表中。
我创建了控制器操作,它获取产品 id 和数量并将它们传递给 Cart 类的添加/删除方法,然后持久化购物车。
我发现为这种系统实现singleton pattern 很有用,尤其是当购物车在构造时从数据库更新自身时。
正如 Alex 提到的助手也很有用,我喜欢使用视图助手来检索当前的购物车实例,并允许您轻松提取小计和总计等。在视图中。
另外,考虑使用 Iterator、Countable 和 ArrayAccess 接口,这样您就可以遍历您的购物车以检索您的所有商品。
希望对你有所帮助!