PHP 실행 순서: 헤더, 주요 페이지 및 바닥글
이 개발자 튜토리얼에서는 bx_Header.html, index.html 및 bx_Footer.html의 기본 레이아웃을 통해 각 PHP 스크립트가 언제 실행되는지 설명합니다. $LayoutHTML의 내용이 단계별로 어떻게 확장되는지와 페이지 종속적이거나 전역적인 변경이 어디에서 가능한지 알 수 있습니다.
조건 및 목표
이 개발자 튜토리얼에서는 bluetronix CMS가 어떻게 레이아웃, 헤더, 메인 페이지 및 푸터로 구성된 페이지를 생성하는지 알아야 합니다. 우리는 이 영역들의 PHP 스크립트가 어떤 순서로 실행되는지와 $LayoutHTML의 어떤 부분이 이미 로드되었는지 보여줍니다.
예제에서는 기본 레이아웃이 CMS 파일 bx_Header.html, index.html 및 bx_Footer.html로 구성되어 있습니다. 메인 페이지 index.html은 호출된 각 HTML 페이지를 대표합니다.
기본 레이아웃: 헤더, 주요 페이지 및 바닥글
기본 레이아웃은 세 개의 영역이 어떤 순서로 포함되는지를 결정합니다. 제시된 예에서는 레이아웃 정의가 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가 옵니다.
레이아웃 정의가 세 개의 영역을 모두 포함하고 있지만, 각 영역의 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
여기에서 예를 들어 헤더의 자리 표시자를 대체하거나 내비게이션을 준비할 수 있습니다. 실제 HTML 내용인 index.html 또는 bx_Footer.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);
따라서 특정 메인 페이지는 이미 로드된 헤더 내에서 자신의 메뉴 항목을 활성화할 수 있습니다.
이 시점에서는 푸터가 아직 로드되지 않았습니다. 따라서 그 HTML 내용은 $LayoutHTML를 통해 신뢰성 있게 변경할 수 없습니다.
3. 푸터의 PHP 코드는 마지막에 실행됩니다.
마지막으로 CMS는 bx_Footer.html을 로드하고 그 PHP 코드를 실행합니다. 이제 $LayoutHTML에는 세 개의 영역 모든 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 코드를 사용합니다. 세 개의 이미 로드된 영역에서 자리 표시자를 대체하고 싶다면 마지막에 실행된 푸터의 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 함수에서 주의해야 할 점은 무엇인가요?
자신의 함수는 페이지 호출 동안 동일한 이름으로 여러 번 정의할 수 없습니다. 고유한 이름을 사용하거나 function_exists()로 정의 전에 해당 함수가 이미 존재하는지 확인하세요.