フレームの代わりにPHPを使う
フレームは使うべきでないことは以前書いたとおりだ。 それでもフレームを捨てられないという理由の過半数は 以下のようなことだろう。
- 統一的なメニュー(orヘッダ、フッタ)をすべてのページにつけたい
- そのためにはメニューとコンテンツをそれぞれフレームにしたほうが 別々に編集できてしかも互いに干渉しないためメンテナンスしやすい
下のようなフレーム構成のページがあるとする。
これは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>
- 各コンテンツを作るときはmenu.phpをインクルードするように書けば メニュー部分が自動的に取り込まれる。手書きでコピペする必要はない。
- メニュー部分に変更がある場合にはmenu.phpを編集するだけで それをincludeしているすべてのコンテンツのメニュー部分も変更される
- コンテンツ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される。

コメント
別にPHPにしなくても、SSIさえ使えれば、
<!--#include virtual="menu.inc"-->
ってできますけど、そういうことではないのかな?
いや、別にPHPを否定しているのではありませんけど、それだけのためにPHPって思う人がいるのは確かだろうから。
(ちなみに、<>がかけなかったので全角にしてあります)
Posted by miyabi at 2004年5月25日
そうかんたんにはいかないのではないでしょうか?
frameを使っているといことは、間違いなくtargetとかつかってるでしょうから、targetの解消をどうやるかが問題ではないでしょうか?
その他、メニューをナビゲーションタイプ(選択されたところを凹んだままにさせたり)だと、うまくいかないと思います。
ヘッダー、フッターくらいだったら、php使わずに、httpd.confとかで付加してやってもいいし、phpが使える環境だったら、autoappendとかでくっつけてもいいんじゃないですかねぇ。
フレームが絶対悪みたいに書かれていますが、予算の都合、システムの都合でそれも有りだと僕は思っています。
Posted by ANN at 2004年5月26日
↑のヘッダー、フッターうんぬんは、意味がちがいましたね。すみません。
Posted by ANN at 2004年5月26日
自分はヘッダ、フッタ、メニューを統一するために、ちょっと前からPHPのinclude使っとります。ちなみに個人サイトですけど、かなり重宝してます。
Posted by ゆきゆき at 2004年5月30日
言われてみれば、この方法でフレーム構造を実現するのは合理的ですね。
負荷的にもSSIより低くなる、のかな?
早速導入してみます。
Posted by rico at 2004年6月25日
php初心者ですが
色々と参考書を読んで、やっと出来ました。
インクルードファイルは、複数の定義付けられた
部位もその1つで別々に読み込むことが出来るので
実質1つのファイルで複数のインクルードファイルを設定出来ます。
Posted by ドラゴン at 2005年6月 4日
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
Posted by はやみん at 2005年7月14日
本当にPHPが「体感速度的には静的ページを見るのとほとんどかわらない」のか疑問に思います。
CGIよりは速いというレベルではないのでしょうか?
サイトの規模にもよるとは思いますが。
Posted by take at 2005年8月 1日
いまどきPHPでWebページをつくることは難しいことではありませんので、
書きたいコンテンツをひとつ想定して、
ご自身の手でそれをPHPとCGI(perl?)とでそれぞれつくって、
体感速度を比べてみることをおすすめします。
Posted by watanabe at 2005年8月 1日
否定的なコメントが多いですが、
>フレームを使わずに上の2点を実現する方法のひとつを紹介しよう。
と冒頭で書かれているので、あくまでも実装方法の一例としては良いと思います。
それが最適かどうかというのは、サーバーの仕様等にもよりますし、お仕事でしたら予算との兼ね合いもあります。
Posted by ナナシー at 2005年10月17日
includeが極めて便利であることは分かりましたが、試してみると、menu.phpにリンクされている画像やファイルはすべて絶対パスで書いておかないと違う階層にあるcontent1.phpなどでは正しく表示されないようですが。やり方が間違っているのでしょうか。
Posted by windweb at 2006年4月 5日
コメントする
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)