開発畑トップ   »  PHP   »  今日からプログラマー!PHP入門【テンプレートエンジン作成編】   »  今日からプログラマー!PHP入門(第9回)

今日からプログラマー!PHP入門(第9回)

もう5月も中旬です、なんかあっという間に1週間過ぎた気がします。
1日1日しっかり目標持ってがんばらないと「あぁ今月何やってたんだろうw」ってなりそうです(汗

と、自分に喝を入れて今回も今日プロPHP始めますよ!

今回は第9回目、テンプレートエンジンの動作確認と基本設計です。


基本設計を考えてみる

テンプレートエンジンに限らず、プログラムを作る場合は、ある程度完成形をイメージすることが大事です。
というか、モノづくりの基本ですね^^;
今までは「プログラムの勉強」ということで作りながら修正・追加を繰り返しましたが、今回は基本設計について考えていきましょう。

テンプレートエンジンの基本設計

では、今まで作ってきたテンプレートエンジンを改めて見直してみましょう。
以下の条件でテンプレートエンジンの基本設計を考え直してみます。

  • テンプレートエンジンはクラスで作る
  • テンプレートエンジンは利便性を考えて1つのファイルにする
    ※修正個所の特定などがしやすい
  • エラー処理はエラーハンドラーを使ってユーザー関数にする
  • エラー処理も利便性を考えて1つのファイルにする
    ※テンプレートエンジンと分けて作ることで、テンプレートエンジン以外のエラー処理も作りやすくなる
  • ディレクトリ構造を考える
    ※テンプレートエンジンのファイルやエラー処理のファイルを配置する場所、テンプレートファイルを配置する場所を考える

上記の条件を踏まえて考えたディレクトリ構造は以下の通りです。
※人によって考え方はさまざまなので1例として考えてください。

/index.php
/system
/error.php
/template.class.php
/data
/template.html

では、上記ディレクトリレイアウトについて、何故そうしたのかを説明していきます。

  • テンプレートエンジン(template.class.php)とエラー処理(error.php)をsystemディレクトリ内に入れて、分かりやすくしています。
  • テンプレートファイル(HTMLファイル)はdataディレクトリ内に入れることで、分別化をしています。
  • index.phpはルートディレクトリに配置して、index.phpからsystemディレクトリ内のファイル、dataディレクトリ内のファイルをアクセスします。
    ※そうすることで、必要ならsystemディレクトリ、dataディレクトリにアクセス制限をかけることも可能です。
    ※アクセス制限をかけてもindex.phpからinclude文を使ってファイルを読み込むことはできます。

では、このディレクトリレイアウトでテンプレートエンジンを作ってみましょう。
※既に作成したものがこのリンクからダウンロードできます。
※zipで圧縮していますので、適宜解凍してください。

テンプレートエンジンの動作確認

プログラムコードが長くなってきたので、今回からちょっと表示方法を変えますね。
以下のURLをクリックすると、各コードが表示されます。

/system
/data

では、順を追ってみていきましょう。

inedx.phpの中身

まずは/index.phpの中身を見てみます。

  • 2行目、3行目
    include文を使用して、error.phpとtemplate.class.phpを読み込み
  • 5行目
    $file変数にテンプレートファイル(./data/template.html)を代入
  • 7行目
    templateクラスのインスタンスの初期化をして$objTemplate変数に代入
  • 8行目
    tplSetupメソッドを呼び出して、テンプレートファイルを設定
  • 10行目~ ここからは、以前習ったことと同じです。(今プロPHP第4回の後半部分

template.htmlの中身

次は簡単な方を先に見ていきましょう。
/template.htmlの中身です。

  • 7行目
    {$header}でヘッダーを設定
  • 9行目~11行目
    {foreach}~{/foreach}で$liListの値をループ処理しています。

この辺りの内容も今プロPHP第4回の後半部分で既に習った箇所なので割愛しますね。

error.phpの中身

次は/error.phpの中身です。
これも前々回(今プロPHP第7回)習った内容とほとんど同じなので、説明省略です ^^;
復習する場合は上記リンク先を参照ください。

template.class.phpの中身

さて、/template.class.phpの中身です。
リンクを見ればわかると思いますが、長いです。
さて、どう解説していったらいいやら(心の声w)

基本的には、前回まで習った内容をテンプレートエンジンに反映させています。
それプラス、新たに学ぶべき内容も追加しています。
なので、まずはご自分でコードを読んでみてください。
尺的にもちょうどいい(?)ので、次回このコードの解説をしていきたいと思います。

この連載は「悩んで覚える」がポリシーなので、まずは、読者に丸投げw
分からないところなどはお問い合わせから直接聞いてもらってもいいですよ~
というわけで、次回に続きます。

コメントをどうぞ!