Последовательность выполнения PHP: Заголовок, главная страница и подвал
Этот учебник для разработчиков показывает на примере базового макета с bx_Header.html, index.html и bx_Footer.html, когда выполняются отдельные PHP-скрипты. Ты узнаешь, как содержимое $LayoutHTML постепенно расширяется и где можно внести изменения, зависящие от страницы или глобальные.
Предпосылки и цель
Для этого руководства разработчика вам следует знать, как система управления контентом bluetronix формирует страницу из её макета, заголовка, основной части и подвала. Мы покажем вам, в каком порядке выполняются 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.
Хотя определение макета включает все три области, HTML-содержимое для кода PHP каждой области загружается поэтапно в $LayoutHTML.
1. Сначала выполняется PHP-код заголовка
Откройте в Менеджере файлов файл bx_Header.html. Через PHP Code вы можете редактировать PHP-код этой области.
Заголовок — это первая загруженная область страницы. Пока выполняется его PHP-код, $LayoutHTML содержит только HTML из bx_Header.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;
}
}
Резюме
В нашем базовом макете сначала выполняется PHP-код из bx_Header.html, затем из index.html и, наконец, из bx_Footer.html. С каждым шагом расширяется HTML-содержимое, доступное через $LayoutHTML.
Поэтому размещайте свой PHP-код там, где уже загружены требуемые области HTML: в заголовке для специфических изменений заголовка, на главной странице для собственных содержаний и ранее загруженного заголовка или в подвале для изменений уже собранного макета.
Часто задаваемые вопросы
что часто спрашивают клиенты
В каком порядке выполняются PHP-скрипты?
Сначала выполняется PHP-код из bx_Header.html, затем PHP-код главной страницы, например, index.html, и в последнюю очередь PHP-код из bx_Footer.html.
Какие области HTML содержит $LayoutHTML во время выполнения PHP-кода заголовка?
Во время выполнения PHP-кода заголовка $LayoutHTML содержит только уже загруженный HTML-контент из bx_Header.html.
Может ли главная страница изменять HTML-код заголовка?
Да. Когда выполняется PHP-код главной страницы, заголовок и главная страница уже содержатся в $LayoutHTML. Таким образом, вы можете заменить ранее созданный в заголовке плейсхолдер.
Почему код PHP заголовка еще не может изменять подвал?
Подвал загружается только после главной страницы. Его HTML-контент в это время еще не присутствует в $LayoutHTML.
Какие области может изменять код PHP подвала?
На момент выполнения кода подвала $LayoutHTML уже содержит заголовок, главную страницу и подвал. Оставшиеся плейсхолдеры в этих областях могут быть заменены.
Где я могу увидеть структуру основного макета?
Определение макета показывается в примере в таблице 00_layout. Оно включает bx_Header.html, текущую главную страницу и bx_Footer.html.
Где я могу редактировать код PHP из bx_Header.html?
Выберите bx_Header.html в Менеджере файлов и откройте PHP код.
Что нужно учесть при создании собственных PHP-функций в заголовке и главной странице?
Собственные функции не должны определяться несколько раз с одним и тем же именем во время вызова страницы. Используйте уникальные имена или проверяйте с помощью function_exists(), существует ли функция уже.