使用Display Cache缓存产品显示并仍然可以添加产品

时间:2016-01-11 22:27:33

标签: drupal-7 drupal-forms drupal-commerce drupal-form-validation

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

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

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

可能解决方案并不容易,但我需要提供我可以做的或者我可以开始解决问题的线索。

所以,谢谢你的专家。

1 个答案:

答案 0 :(得分:1)

这种模块组合的解决方案,以便为匿名和放大器提供缓存显示。经过身份验证的用户和添加到购物车表单是在所有显示中以编程方式禁用所请求产品的缓存...并禁用&#34;添加到购物车表单的标记&#34;。

以下是禁用令牌的代码:

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);
        }
    }
}

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