私は1つのフォームを持っていて、そしてそれを関数ファイルからページフッターに挿入しています。各訪問者にランダムなフォームを表示する必要があるため、これをサポートするために開発された機能があります。ただし、キャッシュを有効にした場合、ランダム性は機能しません。
キャッシングにはW3 Total Cache Pluginを使用しています。
だからここで、私はキャッシングからコードの特定のセクションを除外する必要があります。
私はその機能をFragment Cachingの中に入れようとしましたが、それはうまくいきません。
与えられた配列からランダムな整数を渡す必要があり、それに基づいてフッターにランダムな形式をロードします。
確認するコードスニペットは次のとおりです。
<!--MFUNC {E7C5F12EBCDA5F83A41BF33D778ED} -->
<?php
//echo Rand();
$surveyforms=array("10","11");
$ra=$surveyforms[array_Rand($surveyforms)];
echo($ra);
?>
<!--/mfunc {E7C5F12EBCDA5F83A41BF33D778ED} -->
Just Thisはページが更新されるたびに与えられた配列コレクションから乱数をプリントするべきですが、結果をキャッシュするためです。キャッシュを無効にした場合、キャッシュはパフォーマンス上非常に重要であるため、キャッシュを無効にすることはできません。
同じコードがfooter.phpにも移動しましたが、そこでも動作しません。
何かアイデア、関数ファイルでフラグメントキャッシュを使用する方法?私はうまくいく他のどんなアイデアでも大丈夫です。
あなたの回答を楽しみにしています。
ありがとう
ここで( source )は0.9.2.9バージョンのW3TCプラグインのmfunc
部分で、正規表現は次のとおりです。
$buffer = preg_replace_callback('~<!--\s*mfunc\s*' . W3TC_DYNAMIC_SECURITY . '(.*)-->(.*)<!--\s*/mfunc\s*' . W3TC_DYNAMIC_SECURITY . '\s*-->~Uis', array(
&$this,
'_parse_dynamic_mfunc'
), $buffer);
これより、セットアップは次のようになります。
<!-- mfunc W3TC_DYNAMIC_SECURITY code1-->
code2
<!-- /mfunc W3TC_DYNAMIC_SECURITY -->
mfunc
コールバックは
function _parse_dynamic_mfunc($matches) {
$code1 = trim($matches[1]);
$code2 = trim($matches[2]);
$code = ($code1 ? $code1 : $code2);
if ($code) {
$code = trim($code, ';') . ';';
ob_start();
$result = eval($code);
$output = ob_get_contents();
ob_end_clean();
// ... cut ...
そのため、code2
部分が設定されていない場合、code1
部分でeval()
が使用されていることがわかります。この関数のPHPマニュアルを確認します。
http://php.net/manual/en/function.eval.php
それは言います:
コードを開始および終了PHPタグで囲まないでください。
だから私はあなたが持っている実用的な例、と思うだろう
define('W3TC_DYNAMIC_SECURITY', 'E7C5F12EBCDA5F83A41BF33D778ED' );
このようになります(未テスト)。
code1
の場合:
<!-- mfunc E7C5F12EBCDA5F83A41BF33D778ED
echo "From code1: Here is a random number " . Rand(0,1000);
-->
<!--/mfunc E7C5F12EBCDA5F83A41BF33D778ED -->
またはcode2
の場合:
<!-- mfunc E7C5F12EBCDA5F83A41BF33D778ED -->
echo "From code2: Here is a random number " . Rand(0,1000);
<!--/mfunc E7C5F12EBCDA5F83A41BF33D778ED -->