2

テンプレートに関する非常に具体的なタスクがあります。標準の Smarty 3 ( 3.1-DEV ) テンプレート システムを拡張してカスタム {block} 関数を取得する必要がありますが、基本的な機能 (追加/書き換え、合計など) は維持します。一般に、次の機能を取得するために各 {block} 競合を処理する必要があります。 :

  • {block} の外にある各単一テンプレートのコンテンツを無視します (テンプレートのソースは関係ありません)
  • 処理された {block} コンテンツへの「参照」を保持します (smarty デストラクタで「表示」されたブロックのキャッシュされたコンテンツを取得したいが、メモリに保持したくない)
  • 同じ継承機能を取得しました(ネストされたブロックの親を取得できるなど)
  • ネイティブの smarty キャッシング システムを保持する
  • smarty エンジンを直接変更せず、プラグインとクラス拡張を介して実装します

カスタム ブロック関数を作成しようとしましたが、ネイティブ {block} の継承機能が失われ、表示/処理されたコンテンツを制御できず、デストラクタでコンテンツを取得できません。

主なアイデアは、すべて$smarty->display()$smarty->fetch()呼び出しを処理し、すべてのブロックのコンテンツを収集し、それらのコンテンツへの参照を保持しますが、すぐには表示しないことです。

メインの smarty インスタンス デストラクタにコンテンツを表示する必要があります。表示するコンテンツは、加工されたブロックを使用して組み立てる必要があります。

おそらく、このタスクには他のテンプレート ソリューションがあるか、すぐに使える機能が smarty にありますが、見つかりません。また、スマートなテンプレート システムを変更したくなく、php-template<? if( $a < $b ): ?> <b>Output</b> <? endif; ?>の使用を拒否します。

upd : Smarty で「2 ステップ ビュー」を実装したいのですが、簡単かつシンプルにします。

ありがとう。

4

0 に答える 0