所以,我正在尝试使用PHP构建模板加载器系统。这是我到目前为止所得到的:
的config.php:
<?php
$style_assets_path = "/includes/styles/";
$template = "";
if ($_GET['pageid'] <= 100) {
$template = "/main/main.php";
}
function loadTemplate() {
global $style_assets_path;
global $template;
require_once dirname(__FILE__) . $style_assets_path . "templates" . $template;
}
?>
home.php:
<?php
$page_title = "Homepage";
$menu_selected = "active";
$menu_selected_2 = "";
$menu_selected_3 = "";
$menu_selected_4 = "";
$content_heading = "Featured Content";
$page_contents = "";
$special_id = "home";
require_once dirname(__FILE__) . "/config.php";
if ($_GET['pageid'] !== '1'){
header('Location: /home.php?pageid=1');
exit(0);
}
loadTemplate();
?>
所以变量:
$page_title = "Homepage";
$menu_selected = "active";
$menu_selected_2 = "";
$menu_selected_3 = "";
$menu_selected_4 = "";
$content_heading = "Featured Content";
$page_contents = "";
$special_id = "home";
即使声明了它们也没有它们的值?
我做错了什么?
答案 0 :(得分:0)
include()
和require()
的工作方式就像您将所包含的文字切换/粘贴到您调用include()
/ require()
的位置一样。由于您正在进行include()
INSIDE函数调用,因此您设置的变量位于该函数的范围内。从函数返回时,变量将作为函数后清理的一部分进行销毁。
e.g。考虑一下:
inc.php:
<?php
$foo = 'bar';
test.php的:
<?php
function baz() {
include('inc.php');
echo "Inside baz(): $foo\n";
}
baz();
echo "Outside baz(): $foo\n";
你得到这个作为输出:
inside baz(): bar
PHP Notice: Undefined variable: foo in /home/marc/test.php on line 9
Outside baz():
注意&#34;外面&#34;输出产生了一个未定义的变量通知。
答案 1 :(得分:0)
您正在函数内部调用require_once
,因此只有局部变量和声明为global
的变量才可用于所需文件。
function loadTemplate() {
global $style_assets_path;
global $template;
require_once dirname(__FILE__) . $style_assets_path . "templates" . $template;
}
您需要将所有这些变量声明为全局变量。
function loadTemplate() {
global $style_assets_path,
$template,
$page_title,
$menu_selected,
$menu_selected_2,
$menu_selected_3,
$menu_selected_4,
$content_heading,
$page_contents,
$special_id;
require_once dirname(__FILE__) . $style_assets_path . "templates" . $template;
}
<强>更新强>
目前尚不清楚文件的组织方式,但可能需要使用global
设置所有变量。
global $page_title = "Homepage";
如评论中所述,这可能不是制作模板引擎的最佳方式。