我在理解一个概念时遇到了问题。 假设您已登录并向购物车添加了一些商品,但未注销您已注销。下次登录时,您将找到包含您之前添加的项目的购物车。 我想知道这个概念是如何工作的?经过一番研究后,我发现它正在使用缓存文件。但是这个缓存文件如何工作?此缓存文件如何与后端数据库相关?
答案 0 :(得分:1)
OpenCart使用customer
表中的字段将购物车项目存储为序列化数据数组。该字段称为cart
。同样,心愿单使用相同的技术,再次在wishlist
表中称为customer
。要实际加载缓存的内容,请使用此代码在login()
中的/system/library/customer.php
方法中加载值
if ($customer_query->row['cart'] && is_string($customer_query->row['cart'])) {
$cart = unserialize($customer_query->row['cart']);
foreach ($cart as $key => $value) {
if (!array_key_exists($key, $this->session->data['cart'])) {
$this->session->data['cart'][$key] = $value;
} else {
$this->session->data['cart'][$key] += $value;
}
}
}
此代码实际上会将商品添加到当前购物车中,因此如果您已经在购物篮中有商品,则会合并它们
答案 1 :(得分:0)
当您提出更多问题时 - 一个与购物车和物品存储相关的问题以及一个或两个缓存相关,并且 Jay Gilford 回答了购物车相关部分,以下是缓存的答案:< / p>
Opencart缓存您在大多数时间和每次页面加载时使用的数据:货币,语言,类别,产品,类别产品数量,权重类别,税收等等。在模型中(现在谈谈前端/目录)在获取数据时,OpenCart会在查询数据库之前查找缓存的数据。如果发现缓存数据被提取和反序列化(它们使用PHP的函数serialize()
存储在纯文本文件中)并返回到控制器而不查询数据库 - 因此提取应该是更快 1 。如果没有缓存数据,则查询数据库,然后序列化获取的数据库数据(使用PHP的函数serilizae()
)并保存到相应的缓存文件中。
这是一个可能发生的小问题 - 在您直接在数据库中编辑数据之后(使用phpMyAdmin,可能原因无论如何)在前端不存在更改。这是因为在请求它们时会缓存旧的数据缓存。如果您必须进行此类编辑,请不要忘记手动删除相应的缓存文件。
这导致我们管理(后端)部分模型 - 在数据成功存储到数据库之后编辑或添加数据(类别,产品,货币,重量等等)时,立即删除相应的缓存文件因此可以在包含最新数据的前端重新创建。
可以在/system/cache/
文件夹中找到缓存文件。
编辑:缓存已在index.php
内实例化并注册,然后在$this->cache
set()
中可以在控制器和模型中访问,方法get()
,{{1 }}和delete()
是可调用的。缓存类本身可以在system/library/cache.php
找到,并且非常简单明了。
这样的答案是否足够?
1 我见过一台服务器,PHP-MySQL通信非常快,文件系统访问速度慢...