スマートなテンプレートでは、次のような修飾子として、ユーザー定義関数を呼び出します。
{"myArray"|assignArray}
PHPのユーザー定義関数は次のようになります。
function smarty_modifier_assignArray($str)
{
global $smarty;
if ($str=="myArray")
{
// it is not constant in real, but comes from a mysql query
$all = array( array("foo","joe")), array("green", "blue"));
$smarty->assign($str,$all);
}
return null;
}
私の目的は、mysqlから「myArray」をロードするのに費用がかかることです。テンプレートにその配列が必要ない場合は、ロードしたくありません。私のテンプレートは次のとおりです。
{"myArray"|assignArray}
{foreach from=$myArray item=r}
{$r[0]}
{/foreach}
問題は、foreachで$ myArrayが表示されない(または空である)ことです。smartyフォーラム(v3.x、http: //www.smarty.net/forums/viewtopic.php?p = 77671 )で、速度を最適化するために変数がテンプレートスペースにコピーされることを読みました。したがって、テンプレートを開始した後、その上に新しい変数を割り当てることはできません。悲しいことに、それは本当のようです。テンプレート{assign...}を使用してもそれは可能だと思いますが、その{assign...}に動的なマルチレベル配列を生成することはできませんでした:(
私は何をすべきか?何か案は?