php HTMLのテンプレートを作る方法

他言語サイト
翻訳はみつかりませんでした
  • ---

    LINEで送る
  • -

    はてなブックマーク
    ブックマーク
  • -

    pocket
  • -

    rss
イラストACの画像をもとに加工しています。

CMSやフレームワークは、Webサイト作成でまず最初に使うことを考えるくらい中核になっています。WordPressやLaravelが有名です。

これらに共通しているのは、HTML文がテンプレート化されていることです。HTMLの共通部分をテンプレートにすることで同じコードを使いまわします。

そのテンプレートの作り方を分かりやすいように説明します。かんたんです。早い人は『あっ、そいうことね』ぐらいで2,3分で終わります。

そもそもテンプレートってなに?

-> テンプレートの意味が分かる人はスキップ

さっきもチラッと言いましたが、テンプレートはあらかじめ用意されたデフォルトのフォーマットです。

一からコードを書くよりも、よく使われるコードはテンプレート化して細かいところを修正するほうが作業は早いです。

そしてテンプレートには、変数や処理の関数が埋め込まれていて、自分用にカスタマイズできるような仕組みが用意されています。

LaravelのBradeはその仕組み専用のプログラムです。

ここでは、Bradeの使い方の説明はしません。このようなテンプレートがPHPプログラムでどのように作られているのかは見ていきます。

テンプレートのしくみはバッファリング

phpにはバッファリングという機能があります。プログラムの実行結果の中でechoなどで標準出力した内容だけをメモリ上に保存します。

テンプレートはこのしくみを利用します。

テンプレートのしくみ

  • バッファリング開始
  • テンプレートファイル読み込み
  • バッファリング終了
  • バッファリング内容出力
  • バッファリングのクリーンアップ

サンプルコードを見たほうがよいですね? コードはこのようになります。

main.php
<?php
require_once "load-template.php";

load_template("template.php");
template.php
<?php
?>
<div class="<?php echo get_class_type(); ?>">
<ul>
<li>sample 1</li>
<li>sample 2</li>
</ul>
</div>
load-template.php
<?php

function load_template($file){
    ob_start();
    require $file;
    $html = ob_get_contents();
    ob_end_clean();

    echo $html;
}

サンプルコードの説明は、まえにまったく同じコードを使って説明しています。読んでみて分からない人はそちらをどうぞ。-> php HTMLを出力する3つの方法

前の説明では足りないことを補足します。

no image person
テンプレートファイルにパラメータ(変数)を渡すことはできないのか?

と思った人もいると思います。テンプレートに変数を渡せないと意味がないですからね?

テンプレートファイルにパラメータを渡すことはかんたんです。テンプレートファイルを読み込むrequreの前に変数を宣言して値を入れるだけです。

パラメータを追加したload-template.php
<?php

function load_template($file, $attr){
    ob_start();
    require $file;
    $html = ob_get_contents();
    ob_end_clean();

    echo $html;
}

load_template()にパラメータ$attrを追加しました。これでテンプレートファイルで$attrが参照できます。

requireの意味から考えると分かります。requireはphpコードをコールした場所に挿入します。requireで読み込んだテンプレートファイルの中身をrequireの場所にコーディングしているのと同じです。

なので、requireの前で宣言した変数はテンプレートファイルでも使えます。

まとめ

phpプログラムのテンプレート化はバッファリングを使って、テンプレートファイルのphpのコード結果をまとめて保存、そしてあとでまとめて出力するだけです。

変数を渡すこともできますし、テンプレートファイル内でphpコードを挿入することもできます。

変数だけでなく、定義したfunctionもテンプレートファイル内で使うことができます。変数と同じようにrequireの前で定義すればよいです。

テンプレートファイルのしくみはむずかしいようで、実はとてもかんたんです。これでオリジナルのフレームワークを作ることもできます。

  • テンプレートファイルの読み込みにはバッファリングを使う
  • 変数・functionはrequireの前に定義すればテンプレートファイル内に渡すことができる
最近Webカテゴリでよく読まれている記事です。
blog image

ドメイン取得の意味が分からない人へ。王道の方法を紹介します。

ドメインの登録業者を選ぶのに悩む必要はないです。サイトを簡単に早く公開するには全くいらないことで、むしろ邪魔です。『お名前.com』というサービスは必ず耳にします。そのお名前.comのメリットとデメリットと一緒に、ドメインの意味が分からない人が一番失敗しないドメインの取得方法を紹介します。

tadtadya.com

_

SNSでも記事を配信しています。
コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

top
この記事を気に入ったらぜひシェアも!!