- ベストアンサー
HTMLとPHPの分離方法
- HTMLとPHPを分ける方法について教えてください。
- HTMLとPHPを分離するための手順を教えてください。
- HTMLとPHPのファイルを分離する方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>同じファイル内で分離できても、htmlとphpを別ファイルにはできないですか? できますよ、と言うより別ファイルにする方が一般的です。 基本的には、2.のHTML表示の部分を別ファイルにして include "ファイル名"; とするだけです。/template/とかの専用ディレクトリにまとめておくとよいでしょう。 ※尚「ビジュアルをcssで調整するために、htmlとphpの分離したい」は別問題です。「cssで調整する」のは単にCSS、あるいはHTML(文書構造)とCSS(見栄え)の分離になります。HTMLとPHPの分離は、処理(モデル)と表示(ビュー)の話になります。まだ混乱するかも知れませんが、うすっと頭の片隅に入れていてください。
その他の回答 (4)
- emoemoemosan
- ベストアンサー率54% (20/37)
>php中のものにcssを設定することはできますか? できますよ。普通にセレクタから指定してみてください。 多分何か勘違いしてる様に思うのですが、CSSはすべてのPHP側の処理、 つまりサーバー側の処理が終わったデータを、ブラウザが受け取ってレンダリングしています。 ブラウザは単純にHTMLとCSSを受け取って描画してるだけです。 その実行結果のページのソースをブラウザで確認できますよね? そのHTMLに対してCSSがかかっていると考えてください。
- JaneDue
- ベストアンサー率75% (263/350)
考え方を変えましょう。 今は「HTMLを表示しながら」必要に応じて データベースへ接続したり、削除したり、データを取得したりしていますよね。これを、順序を整理して 1.まずは処理だけを行う ・更新なのか削除なのか、何モードなのか判定 ・送信内容がまともか確認(バリデート) ・データベースへの接続・更新・削除等の各処理、必要なデータの取得 ここでは何も出力せず、あくまでも「処理だけ」をします。 HTMLで必要なデータや、あるいはエラーメッセージ等は適宜変数へ入れておきます。 2.HTML表示 すべての処理が終わったら、ここで初めて <!DOCTYPE HTML PUBLIC ~ を開始します。 適宜HeaderやNaviなどの共通パーツを読み込んだり、エラーに応じた表示等々…。 必要なデータは変数に取得しているはずですから、ここではもうDBに接続したりしません。 また原則として、出力するHTMLでは、例えば<table border=1> などとはせず、<table id='Ichiran'>等としてidやclass名を振るだけです。見栄えに関することはすべてCSSの方に書くようにします。 ※Ano2さんがお書きのように、HTML表示部分でも、たとえば一覧表示部分では foreach($data as $res){ echo <<<EOL <tr> <td class='dataName'>{$res['name']}</td> <td class='dataSize'>{$res['size']}</td> <td class='dataDate'>{$res['date']}</td> </tr> EOL; } のようになり「表示に関する処理」は必要です。
- emoemoemosan
- ベストアンサー率54% (20/37)
実行結果で出力が決定するので、完全に切り離すとなると、予め実行結果のテーブルを変数に格納しておいて、html上に出力となると思いますが、もちろん実行環境でないとテーブルは生成されません。 これはMVCフレームワークやSmartyなどのテンプレートエンジンを使っても同じで、 やはりどこかでループ処理をして出力するものを生成しなければなりません。 つまり生成された結果に対してCSSで調整してやるか、予め生成内容を模したものを用意して、 CSSの調整を済ませておくというのが普通だと思います。 ひとつ気になるところがあるとすれば、ループの外にあるものに関してはわざわざprintを使わずに<?php?>の外に出してやった方がはるかに楽なのと、 一般にprintよりもechoの方が高速であるとされているのでそちらを使われたほうが良いでしょう。
補足
emoemoemosan さん、ありがとうございます。 php中のものにcssを設定することはできますか? 例) echo "<tr>\n"; echo "<td>".htmlspecialchars($row["name"])."</td>\n"; echo "<td>".$row["size"]."</td>\n"; この<tr>や<td>の部分です。
- athanasius
- ベストアンサー率37% (361/964)
単に画面とコードを分離したいだけなら、smarty とかのテンプレートエンジンみたいなライブラリを使い、 もっと深く、データ構造とかも分離なら、フレームワークを使うというところでしょう。 smarty http://www.smarty.net/ 一応日本語マニュアルもあるので使うのに困らないとは思います。
お礼
athanasius さん、ありがとうございます。 調べてみます。
補足
JaneDue さん、ありがとうございます。 同じファイル内で分離できても、htmlとphpを別ファイルにはできないですか?