我正在使用一个文件page.php作为多个内容文件的HTML容器;即,page.php定义了页面的大部分常见结构,内容文件只包含每个页面唯一的文本。我想要做的是在每个内容文件中包含一些PHP代码,这些内容文件定义页面的元数据,例如标题,要使用的横幅图形等。例如,内容文件可能看起来像这样(简化):
<?php $page_title="My Title"; ?>
<h1>Hello world!</h1>
该文件的名称将作为URL参数传递给page.php,如下所示:
<html>
<head>
<title><?php echo $page_title; ?></title>
</head>
<body>
<?php include($_GET['page']); ?>
</body>
</html>
这种方法的问题是变量在使用后被定义,这当然不起作用。输出缓冲似乎也没有帮助。
我可以使用替代方法吗?我不希望将内容文件中的文本定义为PHP heredoc块,因为这会破坏我在文本编辑器中突出显示的HTML语法。事实上我也不想使用JavaScript来重写页面元素,因为这些页面中的许多页面都没有使用JavaScript,如果我不需要,我宁愿不将它作为依赖项引入。
答案 0 :(得分:2)
大多数人将包含页面的输出存储到另一个变量中。您是否尝试将所包含页面的所有内容放入输出缓冲区,然后将ob_get_clean()
存储到$page_html
之类的变量中,然后让您的页面如下所示:
<?php include($_GET['page']); ?>
<html>
<head>
<title><?php echo $page_title; ?></title>
</head>
<body>
<?php echo $page_html; ?>
</body>
</html>
编辑:所以第二页看起来像这样:
<?php
$page_title="My Title";
ob_start();
?>
<h1>Hello world!</h1>
<?php $page_html=ob_get_clean(); ?>
答案 1 :(得分:1)
我能想到的最好的事情是将文件包含在渲染中。所以你的模板看起来像这样:
<?php include($_GET['page']); ?>
<html>
<head>
<title><?php echo $page_title; ?></title>
</head>
<body>
<?php renderPage() ?>
</body>
</html>
您所包含的文件如下所示:
<?php
$page_title="My Title";
function renderPage() {
?>
<h1>Hello world!</h1>
<?php
}
?>
这也很好,因为你可以将参数传递给renderPage(),这样模板就可以将信息传递给它所包含的页面。