2

フルページキャッシュの状況で、magento でホールパンチングがどのように機能するかに興味があります。これは、エンタープライズ エディションとは直接関係がなく、一般的に、その全ページ キャッシュとホール パンチング メカニズムがどのように機能するかということとは関係ありません。

メッセージ ブロックが magento によって生成される方法のため、ホール パンチの状況でメッセージ ブロックを処理する方法について非常に興味がありますか?

以前にこれに取り組んだマジェント開発者はいますか?この特定のブロックに穴を開ける方法を説明してもらえますか?

4

1 に答える 1

1

core/messagesブロックがキャッシュされないようにするには、キャッシュ コンテナーをブロックにリンクする必要があります。目標を達成するには、基本的なモジュールが必要です。または、これを既存のモジュールの 1 つに追加するか、どちらか最適な (より論理的な) 場所が必要です。

その中でファイルyour_module/etc/を作成する必要がありcache.xmlます:

<config>
    <placeholders>
        <your_module_messages>
            <block>core/messages</block>
            <placeholder>SYSTEM_MESSAGES</placeholder>
            <container>Your_Module_Model_PageCache_NoCache</container>
        </your_module_messages>
     </placeholders>
 </config>

はのYour_Module_Model_PageCache_NoCache拡張である必要がEnterprise_PageCache_Model_Container_Abstractあり、その拡張では、メソッドを上書きして、基になる をトリガーする代わりにsaveCache()直接返す必要があります。より多くのロジックを使用して、このパンチ ホールをもう少し賢くすることもできますが、ここでは、いつ新しいメッセージがあるか分からないため、常に穴が開いたままになっていると仮定します。$this$this->_saveCache()

public function saveCache($blockContent)
{
    return $this;
}

あとは、Magento をトリガーしてcore/messagesブロック全体からブロックをロードするだけです。これは、次のメソッドをクラスに追加することで実現できます。

protected function _renderBlock()
{
    $block = $this->_placeholder->getAttribute('block');
    //$template = $this->_placeholder->getAttribute('template');

    $block = new $block;
    //$block->setTemplate($template);
    $block->setLayout(Mage::app()->getLayout());

    return $block->toHtml();
}

ファイルからブロック情報を取得し、ブロックcache.xmlの出力を返します。実際に生成されるのは独自の HTML であるためcore/messages、テンプレートを提供する必要はありません。したがって、これらのコメント行をコードから削除することもできます。

うまくいけば、これはあなたの目の前の仕事に役立ちます!

于 2012-08-01T20:54:05.623 に答える