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
、テンプレートを提供する必要はありません。したがって、これらのコメント行をコードから削除することもできます。
うまくいけば、これはあなたの目の前の仕事に役立ちます!