我想在每个页面上使用PHP使用不同内容的页眉和页脚相同。这样做的最佳方法是什么?
我知道这两个受欢迎的,但不知道他们中的哪一个(或者其他一些人)可以选择:
在 contact.php , about.php 等每个页面中,您必须在页面顶部包含标题,在页面底部包含页脚。然后内容介于两者之间。例如, contact.php 将如下所示:
<?php include("header.php"); ?>
Lorem ipsum dolor sit amet...
<?php include("footer.php"); ?>
如果您想要请求,只需输入example.com/contact.php
在 contact.php , about.php 等页面中,您只存储实际内容。然后你有 index.php 和一些参数(例如页面),你可以通过它来指定要包含的内容。例如, contact.php 文件如下所示:
Lorem ipsum dolor sit amet...
这样的 index.php 文件(这是简化版):
<html>
<head>
<title>Lorem ipsum</title>
</head>
<body>
<?php include(some_parser_function($_GET["page"].".php")); ?>
</body>
</html>
现在,当您请求index.php?page=contact
时,它会显示 index.php 以及开始和结束body
标记之间的内容来自 contact.php < / em>的
第一种方法在我看来有点不实用,因为你必须将include函数写入每一页。在第二种方法中,如果你想拥有像example.com/contact.php
或example.com/contact
这样的好网址,你需要做一个apache mod_rewriting ......
哪一种(和其他)方法更好/更受欢迎?为什么?
感谢。
答案 0 :(得分:2)
如果可能的话,我会避免动态包含。它会打开一个安全漏洞,除非您清理来自外部源的变量,即您的情况下的GET参数。您可以采用模型 - 视图 - 控制器框架之类的方法。它们的代码基本上将模板的输出放入布局中。
答案 1 :(得分:1)
选项2对于模板更好。您还可以使用“重写”使其显示,而不会在网址末尾显示?page = pagename。另外,根据您网站上的页面数量,每个文件都必须包含两个页面。
但是如果我是你,我会考虑使用ob_start()ob_get_contents()和ob_flush()。然后,在开始输出html之前,您可以实际运行包含文件中的所有代码。
以下是一个例子:
ob_start();
include("{$page_name}.php");
$page_contents = ob_get_contents();
ob_end_clean();
ob_start();
include("templates/standard.php");
$full_html = ob_get_contents();
ob_end_clean();
echo $full_html;
通过这种方式,您可以轻松创建多个模板,以便随时使用。模板文件如下所示:
<html>
<head>
<title>Lorem ipsum</title>
</head>
<body>
<?php echo $page_contents; ?>
</body>
</html>
答案 2 :(得分:0)
一般来说,2方法的最大优点是验证/插入。如果采用第一种方法,则必须一次又一次地进行所有验证/插入。如果您必须更改/添加/删除某些内容,则必须更改所有页面。这很烦人。我通常更喜欢第二种方法,因为你可以集中所有内容,避免重复相同的指令。
但这也取决于你的网站。
我会举个例子:我曾经做过一个有两个主要部门的网站。
在这种情况下,我做了第2种方法的2个不同页面。
(当我谈论验证时,我的意思是验证所有SESSION变量,如果用户被记录,如果他是ADM等等)