ホームページ > php教程 > php手册 > PHP - Web アプリケーション開発: テンプレートの使用

PHP - Web アプリケーション開発: テンプレートの使用

WBOY
リリース: 2016-06-21 09:10:20
オリジナル
1319 人が閲覧しました

ウェブ|プログラム|テンプレート

大規模な PHP Web アプリケーションを設計したことのある開発者は、おそらく次のような経験があるでしょう。ハイパーテキスト ステートメントの作成、ページのフォーマット、アーティストとしての作業、またはプログラム コードと HTML 静的ページの統合に多くの時間を費やしました。とても時間がかかります。確かに、スクリプト言語を使ったWebアプリケーション開発では、データ処理とデータ表示を分離するのは容易ではありませんが、複数人で連携する場合、データと表示を分離できないと、開発効率や開発効率に大きな影響を及ぼします。専門的な分業。この問題を解決するために、PHP も独自の解決策を提供しています。この記事では主に PHPLIB の Template クラスを紹介します。

1 テンプレート処理クラスの設計
テンプレート処理クラスは主に以下の作業を行う必要があります:
・テンプレートファイルから表示用のHTMLコードを読み込みます。
・テンプレートファイルと実際に生成されたデータを組み合わせて出力結果を生成します。
·複数のテンプレートを同時に処理できます。
·テンプレートのネストを許可します。
·テンプレートの個々の部分の処理を許可します。

上記のタスクを要約すると、テンプレート クラスの設計目標は次のとおりです。表示された HTML コードを複数のテンプレート ファイルから読み取り、これらの表示コード内の動的データが必要な部分を PHP プログラムによって計算されたデータに置き換えて、次のようになります。特定のシーケンシャル出力。このうち交換部品は自由に設定可能です。

ファイルを読み込んで表示用のHTMLコードを読み込みます
テンプレートファイルとデータの組み合わせは定期的な置換を使用します
複数のテンプレートの処理は配列ストレージによって実装されます。
テンプレートのネスティングを実装する主なアイデアは、テンプレートと出力 (中間分析結果) を同等に扱い、両方を置換に使用できることです。
テンプレートファイルにアノテーションを設定し、定期置換時にアノテーションを組み合わせることで部分置換を実現することで、各部品の処理を制御します。

2 テンプレート処理クラスの実装
詳細なコメント付きの合計 345 行のコードは、PHPLib の Template.inc を参照してください。研究と参照のための主な関数をいくつか示します:
1) 関数 set_file ($handle, $filename=" ") 77 行目、ファイルの読み取り
2) 関数 set_var ($varname, $value = "") 119 行目、マッピングの設定data - 変数を置換します
3) 関数 set_block($parent, $handle, $name = "") 96 行目、アノテーションを設定します
4) 関数 subst($handle) 136 行目、データ置換を実行します
5) 関数 parse( $target , $handle, $append = false) 165行目、テンプレートファイルとデータの組み合わせを実行します
6) 関数p($varname) 268行目、処理結果を出力します
注: 私はphp-lib7.2cのTemplateをダウンロードしました。 inc ファイルの 95 行目に「/」がありませんが、追加すると正常に動作します。

3 テンプレート処理クラスの使用
3.1 最も基本的な例
簡単のため、テンプレートファイル、テンプレートを使用した PHP ファイル、およびテンプレート処理クラスファイルがすべて同じディレクトリに配置されていると仮定します。 PHPLIB では、ihtml サフィックスをテンプレート ファイルのサフィックスとして使用するのが習慣です。
使用するテンプレート ファイルは次のとおりです:




テンプレートを使用したテスト




現在時刻は {currenttime} です!


注: テンプレート ファイルは通常の HTML ファイルと似ていますが、唯一の違いは、「{}」で囲まれていることです。 " は、テンプレート処理クラスで置き換えることができる動的コンテンツを持つ変数です。

次に、テンプレート処理クラスを使用して上記のテンプレートを処理します:
//Template クラスを導入します
include("template.inc");

//置換する必要があるデータを取得します
$timeNow =date(" Y-m-d H:i:s",time());

//テンプレート クラスをインスタンス化します
$template= new Template();

//test.ihtml テンプレートをロードします
$template-> set_file(" handle1","test.ihtml");

//テンプレート内の現在時刻を $timeNow の値に置き換えます
$template->set_var("currenttime",$timeNow);

//実際の実行テンプレート操作
$template->parse("output","handle1");

//最終結果を出力します
$template->gt;p("output");
?>

注: PHPLIB Template クラスのみを使用したい場合は、ファイル ヘッダーに Template.inc クラスを含めるだけです。
Template オブジェクトを作成するときは、新しいテンプレート ("/htdocs/apps/templates/") などのテンプレート ファイルのパスを指定できます。デフォルトは現在のパスです。

3.2 テンプレートのネストとブロック設定
次の例は PHPLIB リファレンス マニュアルから引用したもので、より包括的です。ここで説明する必要があるのは、ブロックを設定する目的はネストとは関係がないということですが、この例には両方が含まれています。よくお読みください。ブロック設定は、この状況を回避するためのものです。本来はテンプレート ファイル (固定ページ) で完了できるコンテンツを部分的にループする必要があるため、ループされたコンテンツの一部を抽出して別のテンプレート ファイルに作成します。考えてください。ブロック設定を使用しない場合、この例では 3 つのテンプレート ファイルが必要ですか?
テンプレートファイル1、page.ihtml

{PAGETITLE}




{PAGETITLE}







{OUT}コンテンツ




模板文例2,box.ihtml



{TITLE}






{NUM }{BIGNUM}