1

私が書いている PHP テンプレート クラスに RoR スタイルのパーシャル/コレクションを実装する最も効率的な方法を見つけようとしています。Rails に慣れていない人のために説明すると、別のファイルにあるテンプレート フラグメント (たとえば、テーブルの行またはリスト項目) を反復処理したいと思います。eval に頼ったり、 loop 内に include を配置したりせずに、これを実行したいと考えています。

単純な単一のパーシャルに対処する同様の投稿を見たことがありますが、コレクションでのパーシャルの実装については何もカバーしていません。私はこれについて長い間考えてきました。頭が痛いので、明らかな解決策を見落としているのではないかと心配しています。ここの誰かが、繰り返しますが、評価を必要とせず、ループ内に含めることのないエレガントなソリューションを提案できることを願っています。ティア。

4

2 に答える 2

1

インクルードを独自に処理し、すべてを一度に評価できるテンプレートエンジンが必要です。Cプリプロセッサのように動作します。

ステップ 1 (ソース テンプレート):

$template = '
   foreach($bigarray as $record)
       #include "template_for_record.php"
'

ステップ 2 (前処理後):

$template = '
   foreach($bigarray as $record)
       // include statement replaced with file contents
       echo $record['name'] etc
'

ステップ 3 (最終レンダリング)

  // eval() only once
  eval($template);

このようにして、すべてのループステップでサブテンプレートを評価/インクルードするオーバーヘッドを回避できます。

于 2009-10-27T22:50:32.043 に答える
0

解決策に頼らずに何かを行う方法を尋ねています。

使用するテンプレート システムは、1000 層の深さの抽象化に埋め込まれていても、ループ内で eval または include を使用します。

それがまさにその方法です。

于 2009-10-27T20:43:50.263 に答える