1

主にコマースと DS を使用して、D7 を使用して e コマース Web サイトを構築しています。パフォーマンスを向上させるために、表示キャッシュをインストールしました。これは、エンティティのレンダリングされた HTML を匿名ユーザーと認証済みユーザーのためにキャッシュするモジュールです。私の特定のケースでは、製品表示 (製品を参照するノードと、もしあればそのバリエーション) をキャッシュしています。

数時間の構成の後、パフォーマンスが「良い結果」になりました。私のすべてのエンティティは、ティーザーおよびフルモードでロールによってキャッシュされました...しかし、ユーザーが「カートに追加」ボタンをクリックすると、製品がカートに追加されないため、エラーが表示されないため、問題が発生します。

考えられる理由の 1 つは、フォームが期待どおりに毎回生成されないため、アクションを無効にしているフォーム トークンまたは何らかのフォーム処理関数です。「カートに追加フォーム」(または任意のフォーム) でフォーム トークンを無効にする方法を読みましたが、機能しません。$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 に答える