【问题标题】:Is it possible to make a persistent shopping cart in Opencart是否可以在 Opencart 中制作持久购物车
【发布时间】:2012-06-29 14:05:35
【问题描述】:

我想在由 Opencart 提供支持的商店中制作持久购物车。换句话说,如果用户将产品添加到购物车并且用户尚未登录。但是下次当客户在一周内再次访问网站时,他的产品应该在他的购物车中。

仅当用户明确从购物车或结帐中或一周后删除产品时,才应删除产品。

我认为这可以通过使用 cookie 来完成?帮助将不胜感激

【问题讨论】:

  • 应该有人为此编写一个模块! (也许有人已经这样做了,你检查到模块页面了吗?)
  • 这取决于您设置 cookie 的过期时间。您不能将其设置为无限保持,但您可以将其设置为持续到(我认为)纪元结束,即 2037 年或其他时间。此外 - 用户可以删除他们的 cookie,和/或编辑它们,这意味着您最好的选择可能是将他们的购物车详细信息存储在数据库中,并让 cookie 具有指向他们在数据库中的详细信息的唯一令牌。
  • 我试图找到一些模块,但没有找到。

标签: php opencart cart


【解决方案1】:

有一个非常简单的方法可以做到这一点。

此修改适用于 OC 1.4.X.X 和 OC 1.5.X.X

这是如何完成的:

在主目录中,找到system/library/session.php

你会发现一行写着:

session_set_cookie_params(0, '/');

对于 24 小时 cookie,将行更改为:

session_set_cookie_params(60*60*24, '/');

您将一分钟内的秒数乘以一小时内的分钟数乘以一天中的小时数,您希望将 cookie 设置为。

这不是一个真正的持久性 cookie,而是一个非常长的会话 cookie,正如 Jay Gilford 所指出的,使用 OpenCart 创建持久性 cookie 没有[简单的]方法,如果我们想办法做到这一点我们会让你们都知道。并且因为 OpenCart 将此 cookie 视为会话 cookie,所以无论会话多长时间,只要 cookie 尚未过期,它就不会自动更新 cookie 为新的过期日期。

扩展会话 cookie 的一个无害的副作用是,当您登录到管理员页面而之前没有注销时,您会收到“无效令牌”消息。这是因为(扩展的)会话 cookie “记住”了您上次的管理员登录。只需忽略这一点并登录。不过还有另一个缺点,即如果产品价格发生变化,并且用户已经将该产品添加到购物篮中,用户将在 24 小时 cookie 中存储之前的价格。

如此构建 OpenCart 的原因似乎是欧盟的隐私法,该法禁止持久性 cookie,除非注册用户未注销。在美国和加拿大,许多使用 Opencart 的电子商务网站都受到了硬连线 cookie 政策的不必要负担,这导致他们失去了返回其网站的客户,而不得不重新订购。

【讨论】:

  • 虽然这个解决方案确实“有效”,因为它使购物车持久化,但应该注意的是,这将使整个会话持久化,这可能是不可取的
【解决方案2】:

在 opencart 中没有模组可以做到这一点。如 cmets 部分所述,您最好的选择是使用带有令牌的 cookie 或将会话到期时间设置为长达 7 天(尽管这有其缺点)

【讨论】:

  • 注册用户也是这样吗?如果注册用户在他的购物车中添加产品?
  • @SyedMudabbir 不,登录的注册用户将保存他们的购物车
  • 哦,我的注册客户一直在抱怨,即使登录后保存到购物车,它也不会保存超过几个小时。
  • @SyedMudabbir 除非您修改了购物车,否则这是不可能的。购物车被保存到用户的数据库中(他们需要登录才能看到他们之前在购物车中保存的物品)
【解决方案3】:

这是错误的:

session_set_cookie_params(60*60*24, '/');

应该是:

session_set_cookie_params(time() + 60*60*24, '/');

无论如何,这会修改核心文件(system/library/session.php),所以真的不是一个完美的解决方案。

【讨论】:

  • 您可以使用称为 VQmod(或更高版本中的 OCmod)的可怕的修改缓存东西,而不是修改实际文件。编辑:你也错了需要 time();它是秒数,而不是过期时间。请看php.net/manual/en/function.session-set-cookie-params.php
  • 是的,但session_set_cookie_params 不会在刷新后延长 cookie 的生命周期,因此删除 time() 将使购物车不是永久化。见:docs
【解决方案4】:

解决方法请看下一条评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 2022-11-12
    • 2012-09-16
    • 2012-10-05
    • 1970-01-01
    相关资源
    最近更新 更多