Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

PHP のテンプレート システムを展開します。

by
Difficulty:AdvancedLength:LongLanguages:

Japanese (日本語) translation by Hakima Madani (you can also view the original English article)

この高度なチュートリアルであなたの PHP の知識の限界をプッシュします。 オブジェクト指向プログラミング、正規表現、テンプレート システムをゼロから構築するカリー化関数などのテクニックを実装します。


なぜテンプレート システムを構築する必要があるのですか。

短い答えは? あなたはしないでください。 では、なぜですか。 こっけいな小さな心の底から、すべての開発者が常にプッシュする新しい及び/または困難な概念を学ぶことと思います。 それは私たちを賢く、興味深い、私たちの仕事を続けている、(ので、あなたが知っている、我々 はそんなに賢くつつ) 負担が少ないように見える私たちの日常的な負荷。 そのためには、独自のテンプレートシステムをロールすることで、カレー正規表現などの頭脳を曲げた概念を使ってPHPのチョップを磨くことができます。 ちょっと! あなたはあなたの将来のプロジェクトの 1 つを使用するテンプレート システムを置くことができること見つけるかもしれない。


ステップ 1 プラン システム

"すべての開発者が常に"プッシュする新しい及び/または困難な概念を学ぶこと。

我々 はダイビング、プログラミングを開始、する前に私たちしようかを把握しましょう。 このテンプレート システムを構築していきたいです。

  1. 私たちの PHP スクリプトから HTML マークアップをほぼ完全に分離します。
  2. フロント エンドよりアクセスできるデザイナー バックエンド スクリプトからデータを作る
  3. 表示ロジックとビジネス ロジックを抽象化することで保守が容易します。

我々 が構築する必要があります。

この演習で構築しようとしているテンプレートシステムは、2つのプロパティと5つのメソッドを含む1つのクラスTemplateと、解析されるテンプレートを含むフォルダから構成されます。 以外は、いくつかのテストのデータを出力するためファイルを必要なだけ。 非常にシンプルな正しいですね。

テンプレート システムのしくみ

デザイナーが私たちのサーバーサイドスクリプトから出てくるデータをフォーマットすることを本当に簡単にするために、使用されるループを持つオプションのヘッダーとフッターを持つテンプレートを可能にするシステムを作成します スクリプトから返されたエントリをフォーマットします。 我々 は、その最も基本的な状態にそれを取り除く、このシステムは以下の手順でいきます。

  1. オブジェクトの配列として解析するエントリを読み込む
  2. 使用するテンプレート ファイルを読み込む
  3. ループからヘッダーとフッターを分ける
  4. 正規表現を使用してテンプレートのタグを探す
  5. テンプレート タグ エントリ オブジェクトのプロパティに一致するかどうかはチェックしてください。
  6. 一致するプロパティのデータ テンプレート タグに置き換える

ステップ 2 概要クラス

どんなプログラミングプロジェクト(あるいはそのことについても何か)をより簡単にするために、私は取るべきステップを概説することから始めるのが好きです。 我々 は、開発を開始、我々 は、本当は、この戦術を用いて空白を埋めるだけ。

フォルダー構造を作成します。

最初に、プロジェクトを格納するフォルダーを作成します。 私は私のテンプレートと呼ばれます。 プロジェクト フォルダー内には、2 つの新しいフォルダーを作成: 資産およびシステム。 Assets フォルダーに私達のデモ用のテンプレートが含まれます。 システム フォルダーには、テンプレート クラスが格納されます。 資産フォルダー内には、2 つの新しいフォルダーを作成: テンプレート。 それが保持しているかを推測する!

主要なファイルを作成します。

次に、メイン プロジェクト フォルダーの index.php を作成します。 これは、移動する準備ができて、我々 はそれを使用して、私たちの個々 のステップと同様の方法に沿って作業していることを確認して一度テンプレート システムをテストします私たちは。 今のところ、しかし、それを空のまま。 システム フォルダーで、class.template.inc.php と呼ばれる新しい PHP ファイルを作成します。 内部には、クラスを定義するテンプレートの呼び出し、to do リストを作成する上記から私たちの手順をみましょうよ。

注: 実際にはタグの置換メソッドは静的であるとカリー化関数はすべてのちょうど何かがあるのよ今の私を信頼します。 私と一緒に固執する場合、私はすべてを説明します。


ステップ 3 は、「テンプレート」を定義します。

テンプレートの解析を開始、する前に当社のテンプレートが何のように見えるとしている決定します。 テンプレートはシンプルに可能な限り使用する必要があります。 私たちはこの権利を行う、半有能な HTML ユーザーがテンプレートを簡単に作成することができますする必要があります。 これは、できるだけ HTML を書いて近くとして私たちのテンプレートを保つことを意味します。

HTML の外観と思います

当社のテンプレートを定義するには、単にエントリをあざけるように我々 は、web ページ上に表示可能性がありますしてみましょう。

すごい。 十分に簡単であります。 それでは記事に異なる部分を区切ります。

  • URL — 記事の URL
  • タイトル — 記事のタイトル
  • パブリッシャー 記事を公開サイト

変数のデータを使用してテンプレートのタグを選択します

上記の情報を使用して、3 つのテンプレート タグの合計が上記の例の必要があります。 を判断できます。

我々 はちょうどタイトルのテンプレート タグとして単語「タイトル」を使用できませんが、どのような場合誰かは彼女のマークアップで「タイトル」という単語を使っていますか。 その結果、すべての単語がエントリのタイトルに置き換えられます - 明らかに、これは正しい動作ではありません。 これを避けるには、テキストに登場するそうではない何かのテンプレート タグをラップする必要があります。 この例では、中かっこ ({}) を使用します。

比較的平均マークアップのテキストに表示する可能性が高いではないテンプレート タグを使用して、我々 は比較的私たちのテンプレートはかなり多くのすべての標準的な状態で期待どおりに動作、特定することができます。


ステップ 4 ロード エントリ

テンプレート エンジンの内部に権利を取得したいと思います、ので我々 はエントリ自体に多くの時間を費やすつもりはないしています。 Envato API を使用し、href の手順を実装するつもり ="http://net.tutsplus.com/tutorials/php/display-anything-you-want-from-the-envato-api-using-php/"> を使用して Drew DouglassのEnvato API。 プロジェクト フォルダーのルートに index.php を開き、次のコードを挿入します。

コメント欄で見ることができる、エンバト API に要求を送信する cURL を使用して $ch_data に返されたデータを格納します。 その後、エントリが返されたと仮定すると、これらのエントリに変換されます返される JSON 形式のオブジェクトの配列。 注:オブジェクト指向PHPの詳細については、Nettutsの記事PHPでのオブジェクト指向プログラミング、私の著書Pro PHP and jQuery、またはWikipediaのOOPの簡単な説明を参照してください。 エントリ オブジェクトには、テンプレートに使用できるプロパティが含まれています。 このデータを表示するには、index.php に以下の太字のコードを追加します。

注: コードは、簡潔にするため省略。 ブラウザーで index.php をロードすると、何か次のように表示されます。

クラスのプロパティ、$posted_at、$site、$url $title — テンプレート タグ {title}、{url} に対応する {site} と {posted_at}。 もう少し後でそれがうまくいくだろう正確にどのようにになるでしょう。

テンプレート システムにエントリを結ぶ

エントリがされていないことに気づいたことがあります読み込みまたは今テンプレート クラスに格納します。 我々 は任意のエントリのセットに対応する当社のテンプレート システムをしそれはかなり簡単に任意のデータベースまたは web サービスからのエントリのセットを取得してオブジェクトの配列に整理するためです。 しかし、我 は解析できるので、テンプレート システムにエントリを格納する必要があります。 この素敵なシンプルで簡単な class.template.inc.php を開き、パブリック プロパティを作成するには、$entries を呼び出されます。 これは、後で解析するためのエントリが保存されます。


ステップ 5 負荷テンプレート ファイル

私たちの次のステップは、解析用のテンプレート ファイルを読み込むメソッドを作成することです。 このメソッドは、テンプレートの包括的なプロセスの一環として実行する必要がありますのみ我々 このメソッドを非公開にすることができます。 利益のために次の PEAR の命名規則は、このメソッド _load_template() を呼びましょう。 さらに、我々 は、我々 はそれぞれ $template_file と $_template を呼ぶ読み込まれたテンプレートと同様にテンプレート ファイルのパスを格納する 2 つの新しいプロパティを必要があります。

注: $template の付加のために $entries プロパティを調整することを忘れないでください。

ファイルが存在するかどうかを確認します。

テンプレートの読み込みで私たちの最初のステップは、それを開く前にファイルが存在するかどうかを確認することです。 これによりエラーを回避し、本当に、それは確かに良いアイデアだけは。 我々 は file_exists() を使用してこれを行うでしょう。 また、ファイルのアクセス許可がない私たちにその内容を読むことがあります外のチャンスがあるのでよく is_readable() を使用していることを確認私たち必要があります。 我々 は可能な限りシンプルにするしようとしているため、我々 追加されます既定のテンプレートの場合、指定されたテンプレートが存在しないか、いくつかの理由のために適切にロードされません。 テンプレートファイルの場所を特定したら、file_get_contents() を使用してそれをプライベートの$ _templateプロパティにロードできます。 Class.template.inc.php の私達のテンプレート (または既定値) をロードする _load_template() に次の太字のコードを追加します。


ステップ 6 解析テンプレート

当社のテンプレートを解析するには、データを適切に処理するために実行される手順の一覧を計画しなければなりません。

  1. 任意の PHP スタイルのタグをテンプレートから削除します。
  2. ファイルからメイン エントリ ループを抽出します。
  3. 任意のテンプレートタグに一致するように正規表現を定義します。
  4. カレーのエントリ データのタグを置き換える関数
  5. ヘッダーを抽出し、存在する場合、テンプレート ・ タグを処理
  6. フッターを抽出し、存在する場合、テンプレート ・ タグを処理
  7. 各エントリを処理し、その値をループに挿入
  8. ヘッダーとフッターを書式設定されたエントリを返す

しかし最初に、正規表現についての言葉

読み込まれているテンプレートとの攻撃の計画、解析のプロセスを開始できます。 これは、私たちを威圧して開発者の酔わせることができる正規表現に得るためもやです。 だから我々 は、ナットを行く前に、2 番目がみましょう。 深呼吸と私の後を繰り返します:"と大きな力大きな責任が伴います。 正規表現目的の結果を達成するために簡単な方法がない場合のみ使用します。 たびに私は、正規表現を虐待、別のプログラマを失うので私が作った混乱を解読しようとしている間彼の 4 番目のレッドブルに泣いている週末。」 心の約束、深く掘り下げてみましょう。 記述する正規表現を処理するため _parse_template() と呼ばれるテンプレート クラスで新しいプライベート メソッドを作成します。

テストの準備を

テスト目的で、3 つ必要があります。

  1. テスト用のテンプレート ファイル
  2. テンプレート クラスから生成されるマークアップを返すメソッド
  3. 返されるマークアップの出力は index.php に変更

最初に、サンプル テンプレートを我々 _parse_template( で構築しようとしている機能をすべてテストしてみましょう 。 assets/templates/、テンプレート test.inc と呼ばれる新しいファイルを作成し、次。

次に、我々 は generate_markup() と呼ばれるマークアップを生成する私たちのパブリック メソッドを定義する必要があります。 このメソッドは単に _load_template() と _parse_template() を呼び出すし、結果の HTML マークアップを出力します。 Generate_markup() メソッドは最終的に $extra に呼び出されるメソッドに引数を追加することで同様の機能に対して準備ができて得るためにヘッダーまたはテンプレートのフッターに挿入ことができます追加のデータを受け入れます。

最後に、generate_markup() の戻り値を出力に index.php を変更してみましょう。 これを行うには、するには、テンプレート クラス ファイルを含めるし、それのインスタンスを作成する require_once を使用します。 私たちの新しいテンプレート オブジェクトには、テンプレートのファイル名を定義し、ブラウザーに generate_markup() の結果をエコーします。

今、すべての我々 は一時的に
_parse_template() の下部にテンプレートの内容を出力するので、我々 はテンプレートを解析我々 に何が起こって見ることができます。

これは、ブラウザー内の index.php を読み込むことで動作していることを確認します。 以下が生成されます。

テンプレート ファイルからコメントを削除します。

私たちの最初の正規表現は、任意の PHP スタイルのコメントをテンプレート ファイルから削除されます。 これは厳密に必要なステップではない、我々 は可能な限りユーザーフレンドリーとしてこのシステムを維持しようとしている覚えておいてください。 それは、どのようなタグを利用を知っている潜在的なテンプレート ビルダーに非常に参考になるが、それはおそらく (を述べないため PHP スタイルのコメントは、HTML レイアウトをしなくなること) あなたの最終的なマークアップでそれらのコメントを持っていることが望ましい。 アプローチしようとしている 2 つのコメント スタイルの PHP の推奨コメント スタイルのとおりです。

まず、ブロック レベルの注釈をキャプチャする正規表現を見てみましょう。 これはで始まる任意の文字列と一致する必要があります /* から */。 すぐにゲート、当社の正規表現はこのようになります。

標準的な正規表現の区切り文字はスラッシュ (/)、我々 は代替の区切り文字を使用して、当社の正規表現で必要なエスケープ文字の数を減らすつもり。 番号記号 (#) は完全に有効な正規表現の区切り記号-私は通常明確にするための標準的なスラッシュを使用してお勧めします、特定のケースで標準を使用して減らすことができます正規表現を読みやすくします。 次を比較します。

我々 は _parse_template() にこの正規表現を挿入、しかし、それは望ましい結果を生成しません。 当社の現在の正規表現の結果を見て _parse_template() に以下の太字のコードを追加します。

注: この資料の残りの部分のコメント部のコメントは (彼らが新しいでない限り) 領域を節約する省略されます。 Index.php; を再ロードする場合に、ブラウザーで出力が変わらない これは、我々 はコメントを開くと終了の間の 0 個以上の文字を考慮する修飾子を使ってワイルドカード文字を追加していないため (. *)。 さらに、我々 は、ブロック レベルの注釈が通常複数回線であるという事実を考慮する必要があります、我々 はこれを考慮して s 修飾子を追加する必要があります。 当社の変更された正規表現は、次のようにする必要があります。

_Parse_template() でこれを調整し、お使いのブラウザー内の index.php を再読み込み。 おっと! 出力です。

我々 は 2 番目のブロック コメントの最後につづいて最初のコメントの終わりに停止する代わりに、ワイルドカード文字を怠惰に忘れてしまった。 これも修正する簡単です: 単に遅延するワイルドカードの後に疑問符を付けます。 それは次のようにする必要があります。

_Parse_template() を調整し、index.php を再読み込みします。 ずっといいです!

次に、我々 は、ターゲット インライン コメントする必要があります (2 つのスラッシュで始まる (//)。 これらは複数回線は、ブロック レベルの注釈正規表現の拡大ではなく、独自の正規表現これ実際になります。 この正規表現は、我々 は、任意のテキストは、次の 2 つのスラッシュを見つける必要が (//)。 この規則の唯一の例外は、リモートURL(http://)内の2つのスラッシュです。これを除外するために、否定的な後書きを使用します。 完成した正規表現は、次のようにする必要があります。

配列の最初の項目として当社のブロック レベルの正規表現と 2 番目としてインライン コメント正規表現変数 $comment_pattern を変更することによって _parse_template() にこれを追加します。

今ブラウザーで index.php を再ロードするとき、コメントは削除正しく。

ヘッダー、フッター、および処理のためのループを分離します。

次の作業はテンプレートを 3 つのセクションに分割する: ヘッダー、ループ、およびフッター。 これらは必ずしも存在しません。
すべてのケースでは、だから我々 はも確認する必要があります。

メイン エントリ ループを分離します。

まず、我々 は {loop} の間のすべてのコンテンツをキャッチすることによりループをつかむだろうと {/loop} テンプレート タグ。 この正規表現は全体のテンプレートと一致し、キャプチャ グループを使用して、ループを識別します。

太字で示すように、_parse_template() を変更エントリ ループが正しく抽出していることをテストするのには。

注: 適切な出力を見ることができますので、$entry_template を返すように関数を変更することを忘れないでください。 preg_replace() を使用してテンプレート全体をキャプチャされたループテンプレートだけで "置き換える"ことで、メインループを分離できました。 お使いのブラウザーのリロード index.php は、次のことを確認します

ヘッダーを分離します。

次に、テンプレートからヘッダーを取得してみましょう。 これを行う正規表現はメイン ループをつかんで 1 つに類似しているが、今回我々 は {loop} テンプレート タグの前にコンテンツをキャプチャするつもりです。 ヘッダーと一致するには、は、テンプレートの最初から開始し、{loop} タグまでのすべてをキャプチャする必要があります。 preg_replace() を使用してヘッダーを抽出しているので、置換が発生したときに確実に削除されるように、{loop}タグの後のすべてにも一致させる必要があります。 この正規表現は、それが完了したときは、次のようにする必要があります。

いくつかのテンプレートは、ヘッダーを必要としません, ので、また全体のテンプレート ヘッダーで返されるデータではないことを確認する必要があります。 その場合、ヘッダーは、データの重複を避けるために NULL に設定する必要があります。 太字のコードと _parse_template() を変更、抽出されたヘッダーを返すに設定します。

予想通り、お使いのブラウザー内の index.php を再読み込みすると表示されているヘッダーのデータが発生します。

フッターを分離します。

今回我々 は後にデータをキャプチャしているフッターは抽出方法でヘッダーに非常に似ています、{/loop} タグし、確実にこの正規表現を使用して、全体のテンプレートと一致しません。

_Parse_template() にこのプラグインし、同様の太字のコードを使用して、ヘッダーとフッターのコンテンツを返すメソッドを設定します。

フッターの出力を表示するインデックス ファイルの再読み込み。

正規表現でテンプレート タグを識別します。

我々 のプロセスの次のステップは、一緒に我々 は、エントリのデータを置き換えることができますように、任意のテンプレートのタグに一致する正規表現することです。 我々 書かれている他とは違ってこの 1 つ全体のテンプレートと一致しないでください。 このパターンは 置き換えられるテンプレートタグのみと一致する必要があります。 これを達成するために我々 は任意の単語文字と一致する速記を使用できます (\w は [A-Za-z0-9_] に相当)、かっこの間の 1 つまたは複数の文字に一致します。 完全な正規表現は、このようになります。

私たちは少しだけで動作は今の let's だけパターンを定義の後の太字のコードを _parse_template() に追加することによってことを確認します。

ロックする準備ができて私たちの正規表現のすべてで、我々 は次の大きなタスク移動できます。


手順 7 のテンプレート タグ交換の準備: カリー化

テンプレートタグをエントリのプロパティで置き換えるには、カレーと呼ばれる概念を使用する必要があります。これは、複数の引数を取る関数を単一の引数を受け入れる一連の関数にすることです。

お待ちください。 何とおっしゃいましたか。

カリー化は、それでは正確にどのように動作を越えると 2 番目を取るの周りに頭を取得する奇妙な概念のようなものです。 カリー化関数の目的は、する時のエラーを発生させることがなく複数の aruguments を必要とする関数に 1 つの引数を指定することが可能です。 だから、例えば、見てみましょう簡単な数学関数。

通常この関数を呼び出す場合に、我々 は単に、次は。

たとえばことが -何らかの理由で-我々 は増分; add() 関数をコールする必要我々 追加ことはできません単に 1 つの引数は今と別の後で (呼び出し元の add(1))。 警告を発行します。

だから適切な数の引数が渡されたかどうかをチェックする中間の手順が必要です。 もしそうなら、いつものように関数を実行します。 ただし、引数が少なすぎる場合は、新しい関数は関数名と格納される最初の引数で返されます。 この方法は、2 番目の引数が渡されると元の関数は正常に呼び出すことができます。 私たち add() 関数を使用すると、例と我々 は架空の関数 curry() を使用してこの関数をカレーができますと仮定すると、このプロセスを示すことができます。

カリー化メソッドを記述します。

我々 は、カリー化のしくみを知って、書き込み関数を見てみましょう。 カリー化関数自体は常に使用すれば、関数を返します create_function()。 作成された関数は、引数の適切な数が存在して場合は call_user_func_array() を使用して通常どおりにカリー化関数を実行場合にチェックします。 十分な議論がない、create_function() を使用して別の関数が返されます。 このすべてを一緒に入れて作成された関数の中で関数を作成する必要があるために、エスケープのたくさんがあります。 これにより実際よりもより多くの混乱を見て私たちのカリー化メソッド。 次の太字のコードをテンプレート クラスに追加します。

どのようにカリー化テンプレート システムに適用されますか。

今はそれができない場合がありますすべてのこれはテンプレート システムに適用する方法をクリアします。 とき私達は具体的には、これに行く次のステップに着くが、一言で言えば、我々 はテンプレートのタグを交換するために 2 つの引数を持つ関数を呼び出すことがでく必要があります: 1 つの引数がデータをプルする必要がありますエントリ、と交換するテンプレートタグ。 以来、我々 は、タグの置換正規表現を使用している、我々 は preg_replace_callback() を使用して、置換する必要があります。 しかし、以来、コールバック関数に渡される 1 つの引数を受け入れるのみ — 一致するテキスト-我々 は既に内部に格納されているエントリは、カリー化関数を渡す必要があります。 成しているか。 それを実現してみましょう!


ステップ入力データに一致する 8 置換テンプレート ・ タグ

すべての部分は、場所です。 今、私たちは、ドットを接続し、それを成し遂げる必要があります。

置換法タグを書き込む

独自に簡単にタグを交換: 一致したテキスト テンプレート タグをその名前のエントリ オブジェクトのプロパティが存在するかどうかを参照してください。 場合、当該プロパティに格納されているデータを返すかどうかは、返すだけテンプレート タグのデザイナーを参照してくださいすることができますので何か間違って (またはエッジの場合、中かっこに包まれていた奇妙な文字列はありません)。 この関数はreplace_tags() と呼ばれ、有効なコールバックとしてカリー化関数に渡すことができるように静的になります。 以下の太字のコードを使用してテンプレート クラスに追加します。

注: このメソッドの上部を unserialize() 呼び出しは、カリー化関数を使用してオブジェクトを渡すときの問題が原因です。 我々 は次のステップでオブジェクトをシリアル化でしょう。

テンプレートのタグを置き換える方法を解析テンプレートを変更します。

当社のテンプレート システムを完了するため、カリー化されたコールバック関数をすべて交換電話の使用の準備ができて取得するまず。 これは、Template:: replace_tags() をカリー化と $callback をという名前の変数に格納することによって行われます。 これを次の太字のコードを _parse_template() に追加します。

次に、我々 は $entries 配列内の各エントリ オブジェクトを通過するループを設定する必要があります。 各エントリでは、最初の引数としてテンプレート タグ regex の preg_replace_callback()、2 番目の引数としてシリアル化されたエントリ オブジェクトと 3 番目の引数としてループ コールバックを呼び出す必要があります。 それぞれの呼び出しから返されるマークアップは、すべてのブラウザーに出力するエントリのマークアップを格納する $markup という名前の変数に追加します。 これを太字のコードを _parse_template() に追加します。

私達はこれをテストすることができます、前に我々 はエンジンがある何かをループするようにエントリを作成する必要があります。 Index.php というプロパティを持つダミーのエントリを追加します。
テスト テンプレート ファイルのタグをテンプレートに合わせて $test:

ダミー エントリが存在、私たちは私たちのブラウザー内の index.php をリロードすることによってテンプレートのタグ置換をテストできます。 出力を参照してください。

これは我々 は効果的にテンプレート エンジンを作成したことを意味する! しかし、我々 はまだ行ってないしている: 我々 はまだ、ヘッダーとフッター テンプレート ファイルのテンプレート ・ タグを置換する機能を追加する必要があります。

ヘッダーとフッター テンプレートのテンプレート ・ タグを置き換える

ヘッダーとフッター テンプレートのタグを交換するためのプロセスのループでこれらの手続きと同じですが、異なるデータはそうために必要です。 我々 は、generate_markup() _parse_template() メソッドを記述したとき、$extra と呼ばれる引数が含まれていることを覚えがあります。この変数は、ヘッダーとフッター テンプレートのタグを交換するためのデータを格納するオブジェクトとして使用することです。 我々 の目的のため $extra は、2 つのプロパティ、$header$footer、どちらもはテンプレートの対応するセクションのテンプレート タグの置換に使用するプロパティを持つオブジェクトを格納するを含めることができます。 明らかに、ヘッダーまたはフッターのタグが存在しない場合、データは格納されません処理のため $extra で。 そのため、まず $extra オブジェクトであるかどうか確認します。 もしそうなら、そのプロパティをループし、テンプレート タグ regex、シリアル化されたヘッダーまたはフッター オブジェクト、およびテンプレートのヘッダーまたはフッター セクションに渡された後にコールバックで preg_replace_callback() を実行します。 当社テンプレート システムを完成させるのには、以下の太字のコードを追加します。

ブラウザーで index.php を再ロードする場合は、次の出力が表示されます。

最後を行うには、ヘッダーとフッター テンプレートのタグ置換をテストすることです。 template-test.inc を開き、ヘッダーとフッターの 2 つの新しいテンプレート タグを追加します。

次に、index.php に戻って、2 つのオブジェクトの $extra と呼ばれる新しいオブジェクトを追加
新しいテンプレート タグに対応するプロパティを持つ $header $footer プロパティに格納されます。

注: generate_markup()$extra を渡すことを忘れないでください!これらの変更を保存、ブラウザーでファイルを再読み込み、次が表示されます。


ステップ 9 使用実際エントリ

最後の行使としてみましょうエンバト市場からいくつかの実際のエントリを使用して、それらを表示するテンプレートをデザインします。

テンプレートを作成します。

テンプレートは、作成してみましょう新しいのエントリ list.inc と呼ばれるテンプレート フォルダーに。 内部では、次のコードを追加します。

実際のエントリを読み込み、新しいテンプレートを使用

エンバト API から実際エントリを読み込むために必要なはこのチュートリアルで先ほど書いた関数を呼び出します。 で
index.php、新しいテンプレート ファイルを使用して audiojungle から最新のエントリをロードするコードを変更します。

注: 私は doctype 宣言と基本的な HTML に追加タグ文字エンコーディングの問題を避けるために。


概要

この時点で、オブジェクト指向の PHP、正規表現、および使いやすいテンプレート システムにカリー化関数を正常に結合しました。 このチュートリアルでは、プロジェクトと期待を感じている優れた開発者のような権利について今、将来的に使用するためあなたの開発武器に追加できます。 私は逃したのショートカットを発見しましたか? あなたはテンプレート システムを改善する方法を考えることができますか? マークアップをビジネスロジックから切り離すために、このシステムをプロジェクトでどのように使用することをどう思いますか。 私のコメントにあなたの感想を知ってみよう!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.