1. PHP スクリプトと動的ページ。
PHP スクリプトは、埋め込みなどの方法で HTML ファイルと混合したり、クラスや関数のカプセル化などの形式のテンプレートの形式でユーザー要求を処理したりできる、サーバー側のスクリプト プログラムです。いずれにせよ、基本はこれです。クライアントが特定のページをリクエストします -----> WEB サーバーは、指定された対応するスクリプトを処理に導入します -----> スクリプトはサーバーにロードされます -----> 指定された PHP 解析サーバーによってスクリプトはブラウザによって解析され、HTML 言語形式が形成されます----> 解析された HTML ステートメントはパッケージの形式でブラウザに返されます。このことから、ページがブラウザに送信された後は PHP が存在せず、HTML ステートメントに変換および解析されたことがわかります。実際、クライアントのリクエストは動的ファイルであり、PHP はそれを対応するページに解析してブラウザに送り返します。このページの処理方法は「動的ページ」と呼ばれます。
2 番目の静的ページ。
静的ページとは、サーバー側に実際に存在し、HTML、JS、CSS、およびその他のクライアント側スクリプトのみを含むページを指します。扱い方としては。クライアントは特定のページをリクエストします---> WEB サーバーは特定のページを確認してロードします---> WEB サーバーはそのページをパッケージの形式でブラウザに返します。このプロセスから、動的ページを比較して確認できます。動的ページは WEB サーバーの PHP パーサーで解析する必要があり、通常、HTML 言語情報パッケージを形成する前にデータベースに接続してデータベース アクセス操作を実行する必要がありますが、静的ページは解析したり接続したりする必要はありません。データベースに直接送信できるため、サーバーの負荷が大幅に軽減され、サーバーの負荷容量が向上し、ページを開く速度と Web サイト全体を開く速度が大幅に向上します。ただし、その欠点は、リクエストを動的に処理できないことと、ファイルが実際にサーバー上に存在する必要があることです。
3. テンプレートとテンプレート分析。
テンプレートにはコンテンツ HTML ファイルがまだ入力されていません。例:
temp.html
コード:
コードをコピー コードは次のとおりです:
< ;HTML>
コードをコピー コードは次のとおりです: コードをコピー コードは次のとおりです:
$title = "TwoMax Inter テスト テンプレート";
$file = "TwoMax Inter テスト テンプレット、
作成者:Matrix@Two_Max"; = fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
$content .= str_replace ("{ file }" , $file,$content);
$content .= str_replace ("{ title }",$title,$content);
$filename = "test/test.html ";
$handle = fopen ($filename,"w"); // ファイル ポインターを開き、ファイルを作成します
/*
ファイルが作成され、書き込み可能かどうかを確認します
*/
if (!is_writable ($filename)){
die ("ファイル: ".$filename." は書き込み可能ではありません。プロパティを確認して再試行してください!");
}
if ( !fwrite ($handle,$content)){ //ファイルへの情報の書き込み
die ("Generate file".$filename."Failed!")
}
fclose ($handle); / Close pointer
die ("Create file".$filename."Success!");
?>
1. 記事リストの問題: ファイルが生成されるたびに、ファイル名を記録します。データベース内の推奨記事については、静的ファイルが保存されている指定されたフォルダー内のページをポイントするだけです。 PHP 操作を使用して記事リストを処理し、文字列として保存し、ページの生成時にこの文字列を置き換えます。たとえば、ページ上の記事リストが配置されるテーブルと PHP 処理ファイルにマーク {articletable} を追加します。
コード:
$file = "TwoMax Inter test templatet,
作者: Matrix@Two_Max";
$fp = fopen ("temp.html","r");
$content = fread ($fp,filesize ("temp.html"));
$content .= str_replace (" { file }",$file,$content);
$content .= str_replace ("{ title }",$title,$content); // リストの生成を開始します
$list = '' ;
$sql = "記事から ID、タイトル、ファイル名を選択";
$query = mysql_query ($sql)
while ($result = mysql_fetch_array ($query) )){
$list .= ''.$result['title'].'';
}
$content .= str_replace ("{articletable }",$list,$content);
//リスト生成の終了
// echo $content;
$filename = "test/test.html"
$handle = fopen ($filename,"w");ファイルポインタを開いてファイルを作成します
/*
ファイルが作成され書き込み可能かどうかを確認します
*/
if (!is_writable ($filename)){
die ("File: ".$filename." は書き込み可能ではありません。属性の後にもう一度試してください! ");
}
if (!fwrite ($handle,$content)){ //ファイルに情報を書き込みます
die ("ファイルの生成".$filename." 失敗しました! ");
}
fclose ($handle); //ポインターを閉じます
die ("ファイルの作成".$filename." 成功しました! ");
?>
2 番目に、ページングの問題です。
コードは次のとおりです。 > $fp = fopen ("temp .html","r"); $content = fread ($fp,filesize ("temp.html")); $onepage = '20' ; $sql = "チャネル='$channelid' の記事から ID を選択します";
$num = mysql_num_rows ($query); = ceil ($num / $onepage);for ($i = 0;$i<$allpages; $i ){
if ($i == 0){
$indexpath = "インデックス.html";
} else {
$indexpath = "index_".$i."html";
}
$start = $i * $onepage;
$list = ' ';
$sql_for_page = "チャネル='$channelid' の記事から名前、ファイル名、タイトルを選択 $start,$onepage";
$query_for_page = mysql_query ($sql_for_page); result = $query_for_page){
$list .= ''.$title.''
}
$content = str_replace ("{articletable }",$list,$content); if (is_file ($indexpath)){
@unlink ($indexpath); // ファイルが既に存在する場合は削除します
}
$handle = fopen ($indexpath,"w") / /ファイル ポインタを開いてファイルを作成します
/*
ファイルが作成され、書き込み可能かどうかを確認します
*/
if (!is_writable ($indexpath)){
echo "ファイル: 「.$indexpath.」は書き込み可能ではありません。プロパティを確認してください。もう一度お試しください。 "; //echo
}
if (!fwrite ($handle,$content)){ //ファイルへの情報の書き込み
echo "Generate file".$indexpath." 失敗しました! "; // echo
}
fclose ($handle); // ポインタを閉じる
}
fclose ($fp);
die ("ページング ファイルの生成が完了しました。生成されました 不完全です。ファイル権限システムを確認して再生成してください! ");
?>
一般的なアイデアは次のとおりです。その他のデータ生成、データ入出力チェック、ページング コンテンツ ポインティングなどを必要に応じてページに追加できます。
実際の記事システムの処理プロセスでは、考慮すべき点がまだ多くあり、動的ページとは異なる点に注意する必要があります。しかし、一般的な考え方はこれであり、他の側面も類推して導き出すことができます。
PHP を使用して静的 Web サイト用のテンプレート フレームワークを作成します
テンプレートを使用すると、Web サイトの構造を改善できます。この記事では、PHP 4 の新機能とテンプレート クラスを使用して、多数の静的 HTML ページで構成される Web サイトのページ レイアウトをテンプレートを巧みに使用して制御する方法について説明します。
概要:
========================================
機能とレイアウトを分離
ページ要素の重複を避ける
静的 Web サイト用のテンプレート フレームワーク
========================= ======== ===
機能とレイアウトの分離
まず、テンプレートを適用する 2 つの主な目的を見てみましょう:
機能 (PHP) とレイアウトの分離 ( HTML)
ページ要素の繰り返しを避ける
最初の目的は最も話題になっている目的であり、プログラマーのグループがページのコンテンツを生成する PHP スクリプトを作成し、別のデザイナーのグループがページのコンテンツをデザインする状況を想定しています。ページのコンテンツの最終的な外観を制御する HTML とグラフィック。機能とレイアウトを分離するという基本的な考え方は、これら 2 つのグループの人々が独立したファイルのセットを作成して使用できるようにすることです。プログラマは、PHP コードのみを含むファイルのみを気にする必要があり、外観を気にする必要はありません。ページ
とページ デザイナーのページに埋め込まれた PHP コードが壊れることを心配することなく、使い慣れたビジュアル エディターを使用してページ レイアウトをデザインできます。
PHP テンプレートに関するチュートリアルをいくつか見たことがあれば、テンプレートがどのように機能するかをすでに理解しているはずです。単純なページ パーツを考えてみましょう。ページの上部はヘッダー、左側はナビゲーション バー、残りはコンテンツ領域です。この種類の Web サイトには、次のテンプレート ファイルを含めることができます。
コードをコピーします コードは次のとおりです:
// 例.php require('class.FastTemplate.php');
$tpl = new FastTemplate('.');$tpl->define( array( 'main' => 'main') .htm' ,
'header' => 'header.htm',
'leftnav' => 'leftnav.htm' ) )
// ここでの PHP コードは、以下が含まれるように $content を設定します。適切なページ content
$tpl->assign('CONTENT', $content);
$tpl->parse('HEADER', 'header'); parse( 'LEFTNAV', 'leftnav');
$tpl->parse('MAIN', 'main');
$tpl->FastPrint('MAIN'); ;
ここでは人気のある FastTemplate テンプレート クラスを使用していますが、基本的な考え方は他の多くのテンプレート クラスでも同じです。まず、クラスをインスタンス化し、テンプレート ファイルの場所と、どのテンプレート ファイルがページのどの部分に対応するかを指示します。次に、ページ コンテンツを生成し、その結果をコンテンツ識別子に割り当てます。次に、各テンプレート ファイルを順番に解析します。テンプレート クラスは必要な置換操作を実行し、最終的に解析結果がブラウザに出力されます。
このファイルは完全に PHP コードで構成されており、HTML コードが含まれていません。これが最大の利点です。 PHP プログラマーは、最終ページを適切にフォーマットするための HTML を生成する方法を気にすることなく、ページのコンテンツを生成するコードの作成に集中できるようになりました。
このメソッドと上記のファイルを使用して、完全な Web サイトを構築できます。 http://www.foo.com/example.php?article=099 など、PHP コードが URL 内のクエリ文字列に基づいてページ コンテンツを生成する場合、これに基づいて完全な雑誌 Web サイトを構築できます。
テンプレートの使用には 2 番目の利点があることは簡単にわかります。上の例に示すように、ページの左側にあるナビゲーション バーは別のファイルとして保存されています。Web サイトのすべてのページの左側にあるナビゲーション バーを変更するには、このテンプレート ファイルを編集するだけです。
ページ要素の重複を避ける
「これはとても良いことだ」と思うかもしれません。「私の Web サイトは主に多数の静的ページで構成されています。これで、すべてのページからそれらの共通部分を削除できます。これらを更新する 公開部分は面倒すぎる。将来的には、テンプレートを使用して管理しやすい統一されたページ レイアウトを作成できるようにする。「しかし、物事はそれほど単純ではありません。」「静的なページが多数ある」という問題が明らかになります。
上記の例を考えてください。この例には実際には example.php ページが 1 つしかありません。Web サイト全体のすべてのページを生成できるのは、URL 内のクエリ文字列を使用してデータベースなどの情報ソースからページを動的に構築しているためです。
私たちのほとんどは、必ずしもデータベースをサポートしていない Web サイトを運営しています。私たちの Web サイトの大部分は静的なページで構成されており、PHP を使用して検索エンジンやフィードバック フォームなどの動的な機能をあちこちに追加しています。では、この種の Web サイトにテンプレートを適用するにはどうすればよいでしょうか?
最も簡単な方法は、各ページ
の PHP ファイルをコピーし、PHP コード内のコンテンツを表す変数を各ページの適切なページ コンテンツに設定することです。たとえば、home、about、product という 3 つのページがあるとします。それぞれを生成するために 3 つのファイルを使用できます。これら 3 つのファイルの内容は次のようになります。
コードをコピー コードは次のとおりです。
/ / home.php
require('class.FastTemplate.php');
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav' => 'leftnav.htm' ) ); p>ようこそ訪問
このウェブサイトを気に入っていただければ幸いです
";コードは次のとおりです: php
;このウェブサイトを気に入っていただければ幸いです
コードをコピーします コードは次のとおりです:
< ;?php
require('class.FastTemplate.php');
function pageStart($title = '') {
GLOBAL $tpl;
$tpl = new FastTemplate('.') ;
$ tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav'=> ' leftnav.htm' ) );
$tpl->assign('TITLE', $title);
}
function pageFinish() {
GLOBAL $tpl ;
$ content = ob_get_contents();
$tpl->assign('CONTENT', $content); 'ヘッダー');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl->parse('MAIN', 'main'); ;FastPrint('MAIN ');
}
?>
pageStart 関数は、まずテンプレート インスタンスを作成して設定し、次に出力キャッシュを有効にします。この後、ページ自体のすべての HTML コンテンツがキャッシュに入ります。 pageFinish 関数は、キャッシュからコンテンツを取り出し、これらのコンテンツをテンプレート オブジェクトに指定し、最後にテンプレートを解析して完成したページを出力します。
これは、テンプレート フレームワーク全体の作業プロセス全体です。まず、Web サイトの各ページに共通の要素を含むテンプレートを作成し、次にすべてのページから共通のページ レイアウト コードをすべて削除し、変更する必要のない 3 行の PHP コードに置き換えてから、FastTemplate クラス ファイルを追加します。 php をインクルード パスに追加すると、ページ レイアウトを一元管理できる Web サイトが得られ、信頼性と保守性が向上し、Web サイト レベルでの大規模な変更が非常に容易になります。
この記事のダウンロード パッケージには、実行可能なサンプル Web サイト
コードは次のとおりです: /*
* ファイル名:index.php*/
require "conn.php";
$query = "select * from news order by datetime desc"; mysql_query($ クエリ);
title | 公開時刻 |
= $re["datetime"]?> | |
|