2

フルページキャッシュを有効にしてMagento EEバージョン1.12を使用しています

a) 商品詳細ページがキャッシュされている b) その結果、このページのショッピング カートに動的な商品数が表示されない c) そのため、商品詳細ページに有効なカートの商品数を表示できない

私が従った手順

1) ブロックを作成し、header.phtml から呼び出した 2) その topcart.phtml ブロッ​​クをキャッシュしないようにしようとした

magento の初心者として、キャッシュ ホール パンチングのリンクをいくつか取得しました。

以下のリンクをたどったが成功しなかった

私のファイル構造

app- コード - ローカル - エンタープライズ - ページキャッシュ ->etc - cache.xml

および PageCache - model -container - TopCart.php

以下に示すコード

リンク1を助ける

リンク2を助ける

リンク3

私はファイル cache.xml と cart.php コンテナファイルを作成しました

 <page_html_topcart>
        <block>page/html_topcart</block>
        <name>topcart</name>
        <placeholder>PAGE_HTML_HEADER_CART</placeholder>
        <container>Enterprise_PageCache_Model_Container_TopCart</container>
        <cache_lifetime>36400</cache_lifetime>
    </page_html_topcart>

これは私のtopcart.phpコンテナファイルです

  protected function _getIdentifier()
{
    $cacheId = $this->_getCookieValue(Enterprise_PageCache_Model_Cookie::COOKIE_CUSTOMER, '')
        . '_'
        . $this->_getCookieValue(Enterprise_PageCache_Model_Cookie::COOKIE_CUSTOMER_LOGGED_IN, '');

    return $cacheId;
}

 protected function _getCacheId()
{
    return 'CONTAINER_TOPCART_' . md5($this->_placeholder->getAttribute('cache_id') . $this->_getIdentifier());
}

protected function _renderBlock()
{
    $block = $this->_getPlaceHolderBlock(); //('page/html_header_cart');
    Mage::dispatchEvent('render_block', array('block' => $block, 'placeholder' => $this->_placeholder));
    return $block->toHtml();
}

便利なリンクと手順を教えてください

4

1 に答える 1

3

私は同じ問題に直面しました。したがって、問題は、この場合、キャッシュ可能なテンプレートがないことだと思います。したがって、あなたが行った方法で (そして私も行ったように) キャッシュすると、キャッシュ ファイル内の base64 でエンコードされたリンクのリストになります。それを検証するために、var/full_page_cache 内のファイルを圧縮解除しました。これで、カートの数がキャッシュされ、カートが変更されても変更されず、サーバー側で置き換えることはできません (少なくともきれいな方法)。

この動作の理由は単純です。FPC の場合、テンプレートのみをレンダリングし、いくつかの値を渡します。ただし、テンプレートはその特殊なケースでのみリストをレンダリングし、1 つのブロック メソッド (getLinks) のみにアクセスします。レイアウト xml ファイルには、そのブロックにフィードする「addLink」の呼び出しがいくつかあります。これが、すべての結果が base64 エンコードされてキャッシュ ファイルに保存される理由です。コンテナーからはアクセスできません。

しかし、私はそれを修正する方法があると思います。レンダリングしたいリンクを集めて、そのためのカスタム テンプレートとカスタム ブロックを作成するだけです。これで、適切な方法でキャッシュできるようになります。

于 2013-01-24T16:25:32.140 に答える