PHPの実行順序:ヘッダー、メインページ、フッター
この開発者チュートリアルでは、bx_Header.html、index.html、bx_Footer.htmlを使った基本レイアウトを通じて、各PHPスクリプトがいつ実行されるかを示します。$LayoutHTMLの内容が段階的にどのように拡張されるか、ページ依存またはグローバルな変更をどこで行うことができるかを学びます。
前提条件と目的
この開発者チュートリアルでは、bluetronix CMSがレイアウト、ヘッダー、メインページ、フッターをどのように組み合わせて1つのページを生成するかを理解しておく必要があります。これらの領域のPHPスクリプトがどの順序で実行されるか、また$LayoutHTMLがすでに読み込まれている部分について説明します。
この例では、基本レイアウトはCMSファイルbx_Header.html、index.html、bx_Footer.htmlで構成されています。メインページindex.htmlは、呼び出されたHTMLページを代表しています。
基本レイアウト:ヘッダー、メインページ、フッター
基本レイアウトは、3つの領域がどの順番で組み込まれるかを決定します。表示された例では、レイアウト定義はテーブル00_layoutにあります。
レイアウトの関連部分は次のようになります:
__DB_Layout_/bx_Header.html__
<main>
__DB_Layout_Main__
</main>
__DB_Layout_/bx_Footer.html__
最初のプレースホルダーはbx_Header.htmlを挿入します。main要素内で、__DB_Layout_Main__を通じて現在のページが挿入され、例としてindex.htmlが続きます。それに続いてbx_Footer.htmlが来ます。
レイアウト定義にはすべての3つの領域が含まれていますが、各領域のPHPコードに対するHTMLコンテンツはパートごとに$LayoutHTMLに読み込まれていきます。
1. ヘッダーのPHPコードが最初に実行されます。
ファイルマネージャーでbx_Header.htmlファイルを開いてください。PHPコードを介して、この領域のPHPコードを編集できます。
ヘッダーは最初に読み込まれるページ領域です。PHPコードが実行されている間、$LayoutHTMLにはbx_Header.htmlからのHTMLのみが含まれます。
PHP-Code: bx_Header.html
$LayoutHTML enthält:
bx_Header.html
ここで、例えばヘッダーのプレースホルダーを置き換えたり、ナビゲーションを準備したりできます。この時点でindex.htmlやbx_Footer.htmlの実際のHTMLコンテンツには$LayoutHTMLを介してまだアクセスできません。
2. メインページのPHPコードがその後実行されます
ヘッダーの後、CMSは呼び出されたメインページ、ここではindex.htmlを読み込み、そのPHPコードを実行します。この時点で$LayoutHTMLにはヘッダーのHTMLコードとメインページのHTMLコードの両方が含まれています。
PHP-Code: index.html
$LayoutHTML enthält:
bx_Header.html
index.html
これにより、メインページのPHPコードは独自のプレースホルダーだけでなく、ヘッダー内のすでに存在するプレースホルダーも変更できます。
例: ヘッダーにプレースホルダー__HeaderClass__が含まれている場合、メインページからそれを置き換えることができます:
$LayoutHTML = str_replace("__HeaderClass__","active",$LayoutHTML);
特定のメインページは、すでに読み込まれたヘッダー内で自分のメニュー項目をアクティブとしてマークできます。
この時点でフッターはまだ読み込まれていません。したがって、$LayoutHTMLを介してそのHTMLコンテンツを確実に変更することはできません。
3. フッターのPHPコードが最後に実行されます
最後に、CMSはbx_Footer.htmlを読み込み、そのPHPコードを実行します。これで$LayoutHTMLには3つの領域のHTMLコンテンツがすべて含まれます。
PHP-Code: bx_Footer.html
$LayoutHTML enthält:
bx_Header.html
index.html
bx_Footer.html
そのため、フッターのPHPコードは、ヘッダー、メインページ、またはフッター内のプレースホルダーを、それらがまだ存在する限り置き換えることができます。
すでに読み込まれたHTMLにプレースホルダー__MyTitle__が含まれている場合、そこでそれを置き換えることができます:
$LayoutHTML = str_replace("__MyTitle__","My Custom Title",$LayoutHTML);
これにより、フッターはページ全体の構造が読み込まれた後に行う共通の調整にも適しています。
実行順序の概要
決定的なルールは次のとおりです: PHPは$LayoutHTMLを介して、その時点で既に読み込まれているHTML領域のみを変更できます。
1. bx_Header.html
PHP sieht: Header
↓
2. index.html
PHP sieht: Header + Hauptseite
↓
3. bx_Footer.html
PHP sieht: Header + Hauptseite + Footer
特定のページからヘッダープレースホルダーを制御したい場合、そのメインページのPHPコードを使用します。すべての3つのすでに読み込まれた領域のプレースホルダーを置き換えたい場合、最後に実行されたフッターのPHPコードを使用します。
独自のPHP関数に関する重要事項
異なる領域で独自のPHP関数を定義する際は、同じ関数がページの呼び出し中に複数回定義されないように注意してください。明確な関数名を選択するか、定義する前に関数がすでに存在するかを確認してください。
if(!function_exists("MyTemplateFunction")) {
function MyTemplateFunction() {
return true;
}
}
要約
基本レイアウトでは、最初にbx_Header.htmlのPHPコードが実行され、その後index.htmlのPHPコード、最後にbx_Footer.htmlのPHPコードが実行されます。各ステップで、$LayoutHTMLを介してアクセスできるHTMLコンテンツが増えていきます。
必要なHTMLエリアが既に読み込まれている場所にPHPコードを配置してください:ヘッダーはヘッダー特有のカスタマイズ用、メインページは独自のコンテンツや前に読み込まれたヘッダー用、フッターはすでに組み立てられたレイアウトの変更用です。
FAQ
お客様からよくある質問
PHPスクリプトはどの順序で実行されますか?
最初にbx_Header.htmlのPHPコードが実行され、その後にメインページのPHPコード、例えばindex.htmlが続き、最後にbx_Footer.htmlのPHPコードが実行されます。
$LayoutHTMLはヘッダーのPHPコードの実行中にどのHTMLエリアを含みますか?
ヘッダーのPHPコードが実行されている間、$LayoutHTMLにはbx_Header.htmlから読み込まれたHTMLコンテンツのみが含まれています。
メインページはヘッダーのHTMLコードを変更できますか?
はい。メインページのPHPコードが実行されると、ヘッダーとメインページはすでに$LayoutHTMLに含まれています。これにより、例としてヘッダーで作成されたプレースホルダーを置き換えることができます。
なぜヘッダーのPHPコードはフッターを変更できないのですか?
フッターはメインページの後に読み込まれます。そのため、ヘッダーのPHPコードの実行中にはそのHTMLコンテンツはまだ$LayoutHTMLに存在していません。
フッターのPHPコードはどのエリアを変更できますか?
フッターが実行される時点で$LayoutHTMLにはすでにヘッダー、メインページ、フッターが含まれています。それらのエリアに残っているプレースホルダーはここで置き換えることができます。
基本レイアウトの構造はどこで確認できますか?
レイアウトの定義は、表00_layoutの例で表示されます。それはbx_Header.html、現在のメインページ、bx_Footer.htmlを結びつけています。
bx_Header.htmlのPHPコードはどこで編集できますか?
ファイルマネージャーでbx_Header.htmlを選択し、PHPコードを開いてください。
ヘッダーとメインページで独自のPHP関数を使用する際に注意すべきことは何ですか?
独自の関数は、1回のページリクエスト中に同じ名前で複数回定義してはいけません。ユニークな名前を使用するか、定義前にfunction_exists()を使用して関数が既に存在しているか確認してください。