您如何在Zend Framework项目中“设计”购物车?

时间:2011-03-14 22:21:13

标签: php oop zend-framework software-design

我非常了解ZF,还有一点Magento,但我是电子商务的新手,我确信在设计购物车模型时应遵循最佳做法。

如何设计购物车?

我虽然有两个模型,Model_CartModel_Cart_Item与Zend_Session结合用于将购物车存储在会话中。

您的反馈是什么?

你会怎么做?关于编写购物车系统我应该知道什么?

请注意,我需要一个简单的系统,我甚至不需要使用数量

3 个答案:

答案 0 :(得分:3)

如果您的模型很容易序列化,您只需将它们添加到会话数据中,例如

// 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有一些讨论可以帮助您做出决定。

答案 1 :(得分:1)

你走在正确的轨道上。

我建议为协助此任务创建一个控制器动作助手类。这将使您的控制器代码不那么笨重。这是一个很好的tutorial about action helpers

给辅助类一些基本方法:

$this->_helper->card->add($product, $qty);
$this->_helper->card->remove($product);
$this->_helper->card->getItems();

这些方面的东西。

  

我应该怎么知道写一个   推车系统?

这更适用于结账部分...... 适用于美国。如果您的营业地点与用户的州相同,则客户必须纳税。例如。如果您的企业在佛罗里达州注册并且客户是佛罗里达州居民,则客户必须缴纳税款,但是纽约的客户不会。

答案 2 :(得分:1)

创建Cart和Cart_Item类。 Cart类应包含添加和删除Cart_Items的方法,Cart_Items作为数组存储在Cart类中。另外创建一个save方法,将cart的状态序列化到会话中,我喜欢使用标准的Zend_Db_Table_Abstract模型将Cart序列化到数据库表中。

我创建控制器操作,获取产品ID和数量,并将它们传递给Cart类的添加/删除方法,然后保持购物车。

我发现为这种系统实现singleton pattern很有用,特别是如果Cart正在从构造数据库中更新自己。

正如Alex提到的助手也很有用,我喜欢使用一个视图助手,它将检索当前的购物车实例,并允许您轻松提取小计和总数等。在视图中。

此外,考虑使用Iterator,Countable和ArrayAccess接口,您可以循环浏览购物车以检索所有商品。

我希望这是一些帮助!