使用 Display Cache 缓存产品显示并且仍然能够添加产品

Caching product display with Display Cache and still be able to add products

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

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

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

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

那么,谢谢你的专业知识。

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

这是禁用令牌的代码:

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 和 returns 产品显示 ID 的视图。这可以通过其他方式完成。