0

スマートなテンプレートでは、次のような修飾子として、ユーザー定義関数を呼び出します。

{"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...}に動的なマルチレベル配列を生成することはできませんでした:(

私は何をすべきか?何か案は?

4

1 に答える 1

2

{assign} タグを使用して、レンダリング中にスマートなマルチレベル配列を割り当てることができます。

構文、

{assign var=foo value=[1,[9,8],3]}   // can be nested
于 2016-12-08T06:51:07.690 に答える