質問

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

同様の投稿を見ました単一の部分テンプレートに対処します。これは簡単ですが、コレクションに部分テンプレートを実装することをカバーするものではありません。私はこれについて長い間頭を痛めていましたが、明らかな解決策を見落としているのではないかと心配しています。ここで誰かが、evalを必要としない、またはループ内に含める必要のないエレガントなソリューションを提案できることを望んでいます。 TIA。

役に立ちましたか?

解決

インクルードを独自に処理し、一度にすべてを評価できるテンプレートエンジンが必要です。 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);

この方法で、すべてのループステップでサブテンプレートを評価/含めるオーバーヘッドを回避できます。

他のヒント

ソリューションに頼らずに何かをする方法を尋ねています。

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

これがその方法です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top