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。
尽管布局定义包含所有三个区域,但各个区域的 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
例如,你可以在这里替换头部的占位符或准备导航。此时无法通过 $LayoutHTML 访问 index.html 或 bx_Footer.html 的实际 HTML 内容。
2. 主页面的 PHP 代码随后执行
在头部加载后,CMS 加载请求的主页面,这里是 index.html,并执行其 PHP 代码。此时,$LayoutHTML 同时包含头部和主页面的 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 包含所有三个区域的 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内容。
因此,将你的PHP代码放置在所需的HTML区域已经加载的位置:在头部进行头部特定的调整,在主页面添加自己的内容和之前加载的头部,或在底部修改已组合的布局。
常见问题
客户常问我们的问题
PHP脚本执行的顺序是什么?
首先执行bx_Header.html的PHP代码,然后是主页面的PHP代码,例如index.html,最后是bx_Footer.html的PHP代码。
在Header-PHP代码执行期间,$LayoutHTML包含哪些HTML区域?
在执行Header-PHP代码期间,$LayoutHTML仅包含从bx_Header.html加载的HTML内容。
主页面可以更改头部的HTML代码吗?
是的。当主页面的PHP代码执行时,头部和主页面已经包含在$LayoutHTML中。因此,你可以替换之前在头部创建的占位符。
为什么头部的PHP代码还不能更改底部?
底部在主页面之后才加载。因此,底部的HTML内容在Header-PHP代码执行期间还不在$LayoutHTML中。
底部的PHP代码可以更改哪些区域?
在底部执行时,$LayoutHTML已经包含了头部、主页面和底部。这些区域中仍然存在的占位符可以在这里替换。
我在哪里可以看到基础布局的结构?
布局定义在表00_layout中的示例中显示。它包含了bx_Header.html、当前主页面和bx_Footer.html。
我在哪里可以编辑bx_Header.html的PHP代码?
在文件管理器中选择bx_Header.html并打开PHP代码。
我在头部和主页面的自定义PHP函数中需要注意什么?
在页面请求期间,不能多次用相同的名称定义自定义函数。使用唯一的名称或在定义前用function_exists()检查函数是否已经存在。