1

キャッシュが有効になっているときにMagentoでこの問題が発生しています...

問題:

以下のフッターを使用して、現在のCMSページのタイトルを取得できます。

$this->getLayout()->getBlock('head')->getTitle();

^^フッターで現在のURLを取得するこの方法や他の方法を使用しましたが、同じ症状が発生します。キャッシュをオフにすると、現在のページは問題なく取得されますが、キャッシュをオンにすると、たとえばショップのページタイトルが取得され、他のページにアクセスすると、まだショップであることがわかります。

キャッシュを有効にした場合の問題のシナリオは次のとおりです。

  1. ホームページ(http://devtest.eboost.com/)にアクセスします。

  2. ブログに移動して一番下までスクロールすると、フッターが表示されます。パウダー、ショット、および会社の一部のハイパーリンクは、ホームページと他のすべてのページで異なる必要があります。キャッシュをオフにしても問題なく動作します。リンクはheader.phtmlで正常に機能し、同じロジックを持っています。

キャッシュが有効になっていると、header.phtmlファイルではこのように動作しないため、混乱します。何か特別なことをする必要がありますか、それとも何らかの方法でキャッシュ監視からfooter.phtmlを削除する必要がありますか?このドキュメントにはJavaScriptのほとんどが含まれているため、キャッシュ監視から削除するのは賢明ではないと思います。

私は何をすべきかわからず、クライアントのウェブサイトを公開するためにこれを理解するように非常にプレッシャーをかけられました。

4

2 に答える 2

2

更新:@benmarksの回答ははるかに優れています。それを使用してください。

キャッシュからフッターを削除してみてください。これを試してください-http://ken.edmonds-commerce.co.uk/magento/disable-footer-block-caching-in-magento/

于 2013-02-25T11:37:02.467 に答える
2

アプリケーションは、フッターブロックが動的ではないことを前提としているため、永続的にキャッシュされます。これはコアチームが下した疑わしい決定ですが、2つのオプションがあります。キャッシュを無効にするか、キャッシュキーを変更して動的パラメーターを組み込むかです。どちらも、クラスの書き換えまたはレイアウトXMLを介して実行できます。

block_htmlキャッシュには3つの「設定」があります。

  • null=キャッシュしない
  • false=永久にキャッシュ
  • int=この数秒間キャッシュする

コンストラクターで、プロパティを-にMage_Page_Block_Html_Footer設定します。したがって、「永続的にキャッシュされた」動作になります。このプロパティはmagicメソッドを介してパブリックにアクセスできるため、レイアウトXMLから値を設定できます。残念ながら、レイアウトXMLから値を文字列として渡す方法はありませんが、ヘルパーを介して値を渡すことは可能です。したがって、戻るヘルパーメソッドが機能するはずです。これを行うコアヘルパーがいくつかあります。使用例は次のようになります(作成する必要があるカスタムテーマのlocal.xmlに配置できます)。cache_lifetimefalsesetCacheLifetime()nullnull

<?xml version="1.0" encoding="UTF-8"?>
<layout>
    <default>
        <action method="setCacheLifetime" block="footer">
            <value helper="usa/convertMeasureWeight">
                <x>0</x>
                <x>0</x>
                <x>0</x>
            </value>
            <!--
                i.e.
                Mage_Page_Block_Html_Footer->setCacheLifetime(
                    Mage_Usa_Helper_Data::convertMeasureWeight(0,0,0)
                );
            -->
        </action>
    </default>
</layout>

それはうまくいくはずです。nullただし、これは少しハックな感じがするので、独自のヘルパークラスを作成し、この値を設定するという明示的な目的のために返すメソッドを定義するだけで済みます。

于 2013-02-25T16:46:49.177 に答える