PHP でキャッシュされたコンテンツに変数を渡すにはどうすればよいですか?
質問
基本的に、オブジェクトのメソッドを通じてレンダリングされる他の HTML を呼び出す PHP ページがあります。次のようになります。
私のPHPページ:
// some content...
<?php
$GLOBALS["topOfThePage"] = true;
$this->renderSomeHTML();
?>
// some content...
<?php
$GLOBALS["topOfThePage"] = false;
$this->renderSomeHTML();
?>
最初のメソッド呼び出しはキャッシュされますが、ページ内の位置に基づいて若干異なる表示を行うには renderSomeHTML() が必要です。$GLOBALS に渡してみましたが、値は変化しないので、キャッシュされているのだと思います。
これは、メソッドを通じて引数を渡すか、キャッシュしないことによっては不可能ですか?助けていただければ幸いです。これは私のアプリケーションではありません。Magento です。
編集:
これは Magento で、memcached を使用しているようです。renderSomeHTML() を通じて引数を渡そうとしましたが、レンダリングされる PHP インクルードに対して func_get_args() を使用すると、出力されるものは入力したものと異なります。
編集:
さらに、同じコンテンツを取得する別のメソッドを呼び出し、キャッシュをオフにする引数を渡すことで、キャッシュを「無効化」することができました。皆さん、ご協力ありがとうございました。
解決
明らかに、それはできません。キャッシュの重要な点は、キャッシュした「もの」が変更されないことです。したがって、次のいずれかを行います。
- パラメータを指定する
- 積極的なキャッシュ
- 別のパラメータを設定するとキャッシュが無効になります
または、動的バインディングをサポートするために、キャッシュ メカニズムを自分で書き直すこともできます。
他のヒント
チャッシングはフレームワークによって処理方法が異なるため、さらに詳しい情報を提供していただく必要があります。しかし、それを使用する代わりにパラメータとして渡すことができるかどうかも疑問です $GLOBALS.
$this->renderSomeHTML(true);
あなたの質問は明確ではないようですが、キャッシュとはほぼ「再計算する必要がないように保存される」ことを意味します。コンテンツを異なるものにしたい場合は、より多くの結果をキャッシュし、キャッシュされた正しいオブジェクトを選択して送り返す必要があります。
より良い回答をするには、さらに情報が必要です。Smarty、ドキュメントのキャッシュとは何ですか?「ページ内の位置」とは何を意味しますか?それは何ですか'?