フレームの代わりにPHPを使う

フレームは使うべきでないことは以前書いたとおりだ。 それでもフレームを捨てられないという理由の過半数は 以下のようなことだろう。

  1. 統一的なメニュー(orヘッダ、フッタ)をすべてのページにつけたい
  2. そのためにはメニューとコンテンツをそれぞれフレームにしたほうが 別々に編集できてしかも互いに干渉しないためメンテナンスしやすい
そこで、フレームを使わずに上の2点を実現する方法のひとつを紹介しよう。

下のようなフレーム構成のページがあるとする。

これはPHPを使うと以下のような二つのファイルによって構成することができる。
(menu.phpとする)

<a href=content1.php>コンテンツその1へ</a><br>
<a href=content2.php>コンテンツその2へ</a><br>
(content1.phpとする)

<html>
<body>
<table>
<tr>
<td valign="top" width="20%">
    <?php include("menu.php"); ?>
</td>
<td valign="top" width="80%">
    content1だよ。
</td>
</tr>
</table>
</body>
</html>
このようにすることで、
  1. 各コンテンツを作るときはmenu.phpをインクルードするように書けば メニュー部分が自動的に取り込まれる。手書きでコピペする必要はない。
  2. メニュー部分に変更がある場合にはmenu.phpを編集するだけで それをincludeしているすべてのコンテンツのメニュー部分も変更される
  3. コンテンツ1を閲覧したければ http://www.example.com/content1.php、 コンテンツ2を閲覧したければ http://www.example.com/content2.php というふうに一意なURLを表現でき、フレームを使ったがために「ここを見てください」とURLを伝えることが事実上できなくなるという致命傷を難なく避けることができる。
ということを実現できる。

PHP言語の include 命令は呼んで字のごとく「含めろ」という意味。 たったこれひとつを覚えるだけのことだ。 「プログラミングなんて無理」といわず、未経験のデザイナーさんでも挑戦してほしい。

ついでに、必ずぶちあたるであろう疑問や問題のいくつかについて以下に述べておく。

Q. とにかくPHPって何?状態なんだけど。

とりあえず本屋に行くこと。 数年前と比べると驚くほどPHP関連の書籍は増えている。

Q. いま借りてるサーバー、PHPは使えないみたいだ

迷わず乗換えを考えること。「PHP動きます」とうたっているレンタルサーバー業者はいまや山ほど存在する。

Q. 結局CGIでしょ?表示が重くなるのはやだよ。

PHP言語の動作原理は一般に言うperlなどのCGIとは違う。 技術的な話をしだすとキリが無いのでここでは 「体感速度的には静的ページを見るのとほとんどかわらない」 とだけ言っておこう。

Q. PHPを使うと、普通のHTMLみたいに手元のPC上で出来栄えを確認できないのは不便だ。

手元のPC上でApache+PHPの環境をつくることは読者の皆さんが考えるほど難しくない。 金銭的なコストもほぼゼロだ。 Googleで「apache php windows 環境」といったキーワードで検索すると いくらでも情報は出てくるのでそれらを参考にしてほしい。

Q. いま*.htmlになってる拡張子をすべて*.phpかえろってこと? ということは、リンクも全部*.phpに変えるの?そんな面倒な。

この理由でPHPの導入をためらう業界人は驚くほど多い。 しかし残念ながらそれはWebサーバーに関する正確な知識の不足である。 *.phpをPHPスクリプトとみなすというのは単にWebサーバーのデフォルトの設定に過ぎない。 Apacheで言えばhttpd.confの
AddType application/x-httpd-php .php
というところを例えば
AddType application/x-httpd-php .php .html
にするだけで、*.phpでも*.htmlなファイルであってもそこに埋め込まれているPHPスクリプトは実行されるようになる。 この設定は各ディレクトリの.htaccessファイルなどでも設定できる (httpd.conf側の設定にもよるので要確認)。

さらについでだが、includeされる側のファイルの拡張子は実はなんでもよい(Webサーバ側に拡張子設定をする必要は無い)。 上の例で言えば、menu.php は例えばmenu.inc であってもmenu.include であってもきちんとincludeされる。

トラックバックURL

このエントリーのトラックバックURL:
http://www.ywcafe.net/mt/mt-tb.cgi/360

トラックバック

» フレームの代わりにPHPを使う from 徒然日記
フレームを使うと「ここを見てください」とURLを伝えることが事実上できなくなるというのがカトゆー家断絶で紹介されていて、そのページの関連記事。 PHP*3を使ってお手軽にフレーム無しで俗に言うサイドバーを表示する簡単な仕組み includeするだけで簡単にサイドバーを... 続きを読む

» プログラムもデザイナのモノ? from ハーフボイルドペーパー
PHPに関して、ちょっと違った印象をもちましたね。 今までは、単に組みやすいプログラミング言語という認識だったのが、 Webビジネスコンサルタントのネタ帳を見た限り、そうではないらしいです。 もともと、フレームは使うんじゃないということからのコメントだっ... 続きを読む

» SEOにもよい外部読み込みメニュー from minicpress*
PHPのincludeという手法で外部ファイルを読み込んでメニューをつくると、管理も楽です。そのちょっとした工夫について。 続きを読む

» フレームを使わないでナビゲーションメニュー from prefabolic(仮住まい)
まず最初に、最近のHTML事情はとんとわからないのでかなり間違いとか見当違いなことを言ってるかもしれないのでそこらへんはご容赦を。 まぁとにかくフレームを使わないでサイトを作ろうと思った場合、 ナビゲーション的なメニューやフッタ等のどのページでも同じように. 続きを読む

» フレームを使わずにヘッダなど共通のメニューを使うには from IT Blog
PHPのincludeを使って、共通のソース部分を読み込むやり方がある。 フレ... 続きを読む

» ホームページにインクルードファイルを使おう! from きままな学生。アフィリエイト日記
この間「インクルードファイルの壁」の記事にコメント頂いた方からインクルードファイルについてよくわかりました♪ コメントをしていただいた方、本当にありがとうござ... 続きを読む

» 実際にphpなんかのincludeしてみよう! from きままな学生。アフィリエイト日記
ホームページにインクルードファイルを使おう!で インクルードファイルのことに触れてますのでそちらも参考に… さて、実際にインクルードを使ってみましょう! 続きを読む

» memberlistをphpのreadfileで読み込むように変更 from HighRevできるかなっ!
久しぶりにMTな話題(^^ゞ ClubB1のOfficialBlogにmembe... 続きを読む

» あそこのサイト、フレーム使ってるんですってね from 箱
フレームは使うな、と何年も前から言われてますね ... 続きを読む

コメント

別にPHPにしなくても、SSIさえ使えれば、

<!--#include virtual="menu.inc"-->

ってできますけど、そういうことではないのかな?
いや、別にPHPを否定しているのではありませんけど、それだけのためにPHPって思う人がいるのは確かだろうから。
(ちなみに、<>がかけなかったので全角にしてあります)

そうかんたんにはいかないのではないでしょうか?

frameを使っているといことは、間違いなくtargetとかつかってるでしょうから、targetの解消をどうやるかが問題ではないでしょうか?
その他、メニューをナビゲーションタイプ(選択されたところを凹んだままにさせたり)だと、うまくいかないと思います。

ヘッダー、フッターくらいだったら、php使わずに、httpd.confとかで付加してやってもいいし、phpが使える環境だったら、autoappendとかでくっつけてもいいんじゃないですかねぇ。

フレームが絶対悪みたいに書かれていますが、予算の都合、システムの都合でそれも有りだと僕は思っています。

↑のヘッダー、フッターうんぬんは、意味がちがいましたね。すみません。

自分はヘッダ、フッタ、メニューを統一するために、ちょっと前からPHPのinclude使っとります。ちなみに個人サイトですけど、かなり重宝してます。

言われてみれば、この方法でフレーム構造を実現するのは合理的ですね。
負荷的にもSSIより低くなる、のかな?
早速導入してみます。

php初心者ですが
色々と参考書を読んで、やっと出来ました。

インクルードファイルは、複数の定義付けられた
部位もその1つで別々に読み込むことが出来るので
実質1つのファイルで複数のインクルードファイルを設定出来ます。

SSIでは負荷が高くなると言われるため、PHPでメニュー表示する方法を探していたので、とても助かりました。

以下のページに「(呼び出すページに)PHPプログラムを含まないのであれば includeよりreadfileが得策」と書かれておりました。htmlのみの単純なメニューの場合に。

http://yujiro.dyndns.org/blog/koikikukan/archives/2005/03/08-153818.php


「メニューを動的」にする場合は(条件に応じてメニューを変える。「index.php」ページではすべてのボタンのリンクを有効にしておき、「サービス」ページでは「サービス」ボタンのリンクだけを無効に・・など)以下のページが参考になりました。

http://hotwired.goo.ne.jp/webmonkey/2005/03/index4a_page3.html

本当にPHPが「体感速度的には静的ページを見るのとほとんどかわらない」のか疑問に思います。
CGIよりは速いというレベルではないのでしょうか?
サイトの規模にもよるとは思いますが。

いまどきPHPでWebページをつくることは難しいことではありませんので、
書きたいコンテンツをひとつ想定して、
ご自身の手でそれをPHPとCGI(perl?)とでそれぞれつくって、
体感速度を比べてみることをおすすめします。

否定的なコメントが多いですが、
>フレームを使わずに上の2点を実現する方法のひとつを紹介しよう。
と冒頭で書かれているので、あくまでも実装方法の一例としては良いと思います。
それが最適かどうかというのは、サーバーの仕様等にもよりますし、お仕事でしたら予算との兼ね合いもあります。

includeが極めて便利であることは分かりましたが、試してみると、menu.phpにリンクされている画像やファイルはすべて絶対パスで書いておかないと違う階層にあるcontent1.phpなどでは正しく表示されないようですが。やり方が間違っているのでしょうか。

コメントする

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)


画像の中に見える文字を入力してください。