2

プラグインで、2 つのカテゴリの Shopware HTTP キャッシュを無効にする必要があります。マニュアルには、このイベントを発行する必要があると記載されています。

Shopware()->Events()->notify(
    'Shopware_Plugins_HttpCache_InvalidateCacheId',
    array(
        'cacheId' => 'a14',
    )
);

a14 は ID 14 の記事を表します。マニュアルによると、ac を使用してカテゴリ ページのキャッシュを解除できます。ID 113 と 114 のカテゴリのキャッシュを停止するために、これをプラグインの bootstrap.php に追加します。

public function afterInit()
{
    Shopware()->Events()->notify(
        'Shopware_Plugins_HttpCache_InvalidateCacheId',
        array(
            'cacheId' => 'c113',
            'cacheId' => 'c114',
        )
    );
}

すべてのレベルで手動でキャッシュを空にしましたが、空にした後にキャッシュが再構築されたときに、良いことも悪いことも何も起こらず、エラーがスローされず、カテゴリがキャッシュから削除されません。誰が私が何を変更すべきか手がかりを持っていますか?

完全な解決策は次のとおりです。トーマスの回答のおかげで、すべてが Bootstrap.php で行われます。

最初に PostDispatch_Frontend_Listing イベントをサブスクライブします。

public function install() 
{
    $this->subscribeEvent('Enlight_Controller_Action_PostDispatch_Frontend_Listing', 'onPostDispatchListing');
    return true;
}

次に、特定の条件下で no-cache-header を送信する関数を作成します。

public function onPostDispatchListing(Enlight_Event_EventArgs $arguments)
{
    $response = $arguments->getResponse();
    $categoryId = (int)Shopware()->Front()->Request()->sCategory;
    if ($categoryId === 113 || $categoryId === 114) {
        $response->setHeader('Cache-Control', 'private, no-cache');
    }
}

3 番目にプラグインをインストールまたは再インストールして、イベントへのサブスクリプションがデータベースに保持されるようにします。

4

1 に答える 1