0

Smartyインストールでキャッシュを有効にし、次のテンプレート関数を使用しています

function smarty_updatedhour($params, $smarty)
{
    $date1 = new DateTime($params['timestamp']);
    $date2 = new DateTime("now");
    $interval = $date1->diff($date2);
    $smarty->assign("updated_period", $interval->format('%h'), true);
}

プラグインを次のように登録しました:

$smarty->registerPlugin('function', 'updated_hour', 'smarty_updatedhour', false, array('timestamp'));

私はそれが機能しているかどうかをテストしようとしました

{updated_hour timestamp=$timestamp_vale}
{$updated_period}
{if $updated_period > 10}
    // do other stuffs
{/if}

ただし、smartyページのキャッシュを無効にすると機能しません。

誰かが問題を教えてもらえますか?

4

2 に答える 2

0

Smarty3 では、プラグインは smarty オブジェクトではなくテンプレートで動作します。したがって、関数のフットプリントはfunction smarty_updatehour(array $params, Smarty_Internal_Template $template)です。しかし、それはあなたの問題ではありません。@sudhir による assignGlobal() ヒントでさえ、少しは役に立ちません。

非キャッシュ プラグインは変数を割り当てることはできませんが、実際の出力を返します。

function smarty_updatedhour($params, $smarty)
{
    $date1 = new DateTime($params['timestamp']);
    $date2 = new DateTime("now");
    $interval = $date1->diff($date2);
    return $interval->format('%h');
}

これは、{$updated_period} が非キャッシュではないためです。その出力は、正確に 1 回評価されてから、キャッシュに書き込まれます。{nocache}{$updated_period}{/nocache}上記の変更されたプラグイン コードを試すか、実行してください。

于 2011-12-20T12:30:23.137 に答える
0

次のように、assignGlobal を使用してみてください。

$smarty->assignGlobal("updated_period", $interval->format('%h'), true);

それがあなたのために働くことを願っています

于 2011-12-20T07:01:50.043 に答える