0

現在、Magentoを使用してサイトを開発しており、何らかの理由で、カテゴリページを初めて表示したときにパンくずリストが表示されますが、ページを更新するとブレッドクラムが表示されなくなります。

なぜこれが起こっているのかについてのアイデアは大歓迎です!

ありがとうございました!

ジェフ

編集/更新:breadcrumbs.phtmlファイルに移動し、$ crumbs変数にvar_dumpを配置しました。ブレッドクラムが表示されていない場合、NULLが返されます。ページの更新時に変数がNULLになるのはなぜですか。

編集/更新2:ページ全体のキャッシュがブレッドクラムをキャッシュしていないようです

編集/更新3:これは間違いなくフルページキャッシュの問題です。FPCが無効になっている場合、ブレッドクラムはページが読み込まれるたびに機能します。

4

4 に答える 4

4

EEでも同じ問題があり、開発者モードがオンになっていることに接続されているようです。

index.phpのコードをコメントアウトすると、すべてが機能します。

奇妙な理由で、開発者モードがオンの場合、ブレッドクラムはキャッシュされませんが、空のキャッシュをプルしてFPC内に表示します(これは何もありません)。

この問題について、本日MagentoEEサポートに連絡しました。フィードバックで更新しますが、これはすぐに使用できる問題であるため、この問題を抱えている他の人はサポートに連絡することをお勧めします。

于 2013-02-12T13:01:34.927 に答える
1

これを調べるのに数時間を費やしました。問題は、正当な理由でページキャッシュがページレイアウトをロードしないことです。つまり、ページキャッシュがこのブロックのキャッシュをリロードしようとしたときに、Mage_Catalog_Block_Breadcrumbs-> _ prepareLayout()が呼び出されません。_prepareLayout()は、Mage_Page_Block_Html_Breadcrumbs-> _ toHtml()を呼び出す前にブレッドクラムをロードするものです。

ファイルシステムに保存されるフルページキャッシュの問題を再現する簡単な方法は、次のとおりです。

  1. 製品またはカテゴリのページに移動します
  2. ページ全体のキャッシュをフラッシュする
  3. / var / full_page_cacheに移動し、「%CONTAINER_BREADCRUMBS%」のような2つのファイルを含むフォルダーを検索して削除します

これには、ページキャッシュがそのブロックだけをリロードしようとする必要があります。ロードはMage_Catalog_Block_Breadcrumbs->_prepareLayout()を呼び出さないため、Mage_Page_Block_Html_Breadcrumbs-> _ toHtml()を呼び出すと空の文字列が返され、キャッシュが完全にパージされてページ全体が再ロードされるまで、新しいキャッシュファイルは空になります。

このために私が思いついた修正はきれいではありませんが、最も侵襲性が低いように見えました。_prepareLayout()が行うことを行う_toHtml()メソッドのブロックオーバーライドを作成するだけです。

class Package_Module_Block_Html_Breadcrumbs extends Mage_Page_Block_Html_Breadcrumbs
{
    protected function _toHtml()
    {
        if (!is_array($this->_crumbs)) {
            $this->addCrumb('home', array(
                'label'=>Mage::helper('catalog')->__('Home'),
                'title'=>Mage::helper('catalog')->__('Go to Home Page'),
                'link'=>Mage::getBaseUrl()
            ));

            $path  = Mage::helper('catalog')->getBreadcrumbPath();

            foreach ($path as $name => $breadcrumb) {
                $this->addCrumb($name, $breadcrumb);
            }
        }
        return parent::_toHtml();
    }
}
于 2013-05-06T19:49:09.947 に答える
0

temmplateファイルに次の行を追加する必要があるかもしれません-それはそれと同じくらい簡単かもしれません!

  echo $this->getLayout()->getBlock('breadcrumbs')->toHtml();
于 2013-01-17T17:55:46.233 に答える
0

これは、MagentoEEバージョンの既知のバグです。解決策については、このリンクを確認してください。

最近、このような問題が発生しましたが、この場合、上記の記事のコードはすでにコードベースに追加されています。(cache.xmlから)それを削除するだけで、ブレッドクラムは正常に動作し始めました。奇妙なもの。

于 2014-08-13T09:12:46.917 に答える