【问题标题】:How would you go to "design" a cart within a Zend Framework project?您将如何在 Zend Framework 项目中“设计”购物车?
【发布时间】:2011-07-15 09:18:19
【问题描述】:

我很了解 ZF,并且对 Magento 有一点了解,但我是电子商务新手,我确信在设计购物车模型时可以遵循最佳实践。

如何设计购物车?

我想到了两个模型,Model_CartModel_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 接口,这样您就可以遍历您的购物车以检索您的所有商品。

        希望对你有所帮助!

        【讨论】:

          猜你喜欢
          • 2016-10-24
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-27
          相关资源
          最近更新 更多