1

我正在使用 D7 构建一个电子商务网站,主要使用 Commerce 和 DS。为了获得更好的性能,我安装了 Display Cache,这是一个为匿名和经过身份验证的用户缓存实体呈现的 HTML 的模块。在我的特殊情况下,我正在缓存产品显示(一个引用产品的节点,如果有的话,它的变体)。

经过几个小时的配置,我最终在性能上获得了“良好的结果”。我的所有实体都由 rol 以预告片和完整模式缓存......但是当用户单击“添加到购物车”按钮时出现问题,因为它没有将产品添加到购物车......也没有显示错误。

一个可能的原因是表单令牌或某些表单处理函数使操作无效,因为表单并非每次都按预期生成。我阅读了如何在“添加到购物车表单”(或任何表单)中禁用表单令牌,但它不起作用。我将 $form['#token'] 设置为 false,但仍未将产品添加到购物车。

可能解决方案并不容易,但我需要关于我能做什么或从哪里开始解决问题的线索。

所以,谢谢你的专业。

4

1 回答 1

1

为了为匿名和经过身份验证的用户缓存显示并添加到购物车表单,这种模块组合的解决方案是以编程方式在所有显示中禁用所请求产品的缓存......并禁用“添加到购物车”的令牌形式”。

这是禁用令牌的代码:

function YOUR_MODULE_form_alter(&$form, &$form_state, $form_id) {
    if (strstr($form_id, 'commerce_cart_add_to_cart_form') || strstr($form_id, 'views_form_commerce_cart_form_default')) {
        unset($form['#token']);
    }
}

这是按下添加到购物车按钮时删除缓存的代码:

function YOUR_MODULE_init() {
    if (isset($_POST['product_id'])) {
        $id_product = intval($_POST['product_id']);
        $res = views_get_view_result('sys_search_product_display', 'default', $id_product);
        foreach ($res as $nid) {
            display_cache_flush_cache('node', $nid);
        }
    }
}

请注意,“sys_search_product_display”只是一个视图,它接收产品的 ID 并返回产品显示的 ID。这可以通过其他方式完成。

于 2016-01-14T19:30:36.340 回答