Php 如何改进此模板系统?
目前,我有一个基本的HTML模板文件。当我想要创建一个新页面时,我会复制模板并在特定标记之间放置一些Php 如何改进此模板系统?,php,templates,Php,Templates,目前,我有一个基本的HTML模板文件。当我想要创建一个新页面时,我会复制模板并在特定标记之间放置一些require\u once语句。我想知道是否有更好的方法使每次都不必复制模板。下面是一个典型的例子: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="tex
require\u once
语句。我想知道是否有更好的方法使每次都不必复制模板。下面是一个典型的例子:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/second.css" />
<script language="JavaScript" type="text/javascript"
src="js/validation_functions.js"></script>
<title>Order a Ticket for the ball</title>
</head>
<body>
<div id="banner">St. Tom's Ambulance Ball</div>
<!-- START[container] -->
<!-- "body" -->
<div id="container">
<!-- START[header] -->
<div id="header">
<!-- header -->
<div id="header_text">introduction</div>
<div id="header_cell2">the process</div>
<div id="header_cell3">start</div>
</div>
<!-- END[header -->
<!-- START[content] -->
<!-- "other container" -->
<div id="content">
<!-- START[form] -->
<div id="form">
<?php
require_once(realpath($config["directories"]["views"]."/index.form.view.php"));
?>
</div>
<!-- END[form] -->
<!-- START[data] -->
<!-- "main content" -->
<div id="data">
<?php
require_once(realpath($config["directories"]["views"]."/index.data.view.php"));
?>
</div>
<!-- END[data] -->
<!-- START[side] -->
<div id="side">
<?php
require_once(realpath($config["directories"]["views"]."/index.side.view.php"));
?>
</div>
<!-- END[side] -->
</div>
<!-- END[content] -->
<!-- START[footer] -->
<div id="footer">
<!-- footer -->
<div id="footer_text">
<ul>
<li><a href="index.php">home</a></li>
<li><a href="">partners</a></li>
<li><a href="">projects</a></li>
<li><a href="">contact us</a></li>
</ul>
</div>
<div id="footer_cell2"> </div>
<div id="footer_cell3"> </div>
</div>
<!-- END[footer] -->
</div>
<!-- END[container] -->
</body>
</html>
您可以使用一个控制器文件,在该文件中通过$\u GET变量传递要显示的页面,而不是将include硬编码到每个文件中。然后,控制器处理逻辑并包括适当的页面。很多MVC框架都是这样做的 编辑:要回答第二个问题,您可以检查文件是否存在,而不是使用开关。如果有,则包括该文件,否则输出错误(“页面不存在”或类似内容)
显然,您可能应该使函数更健壮一些,并可能将包含的文件限制在某个目录或其他地方。另外,请确保正确过滤$page变量,以便用户无法访问任何文件。如果您的服务器支持它,您可以引用要包含在所有页面中的内容。htaccess:
php_value auto_prepend_file "header.php"
php_value auto_append_file "footer.php"
(在上找到此文件)保留此文件作为模板文件。那么,对于站点中的所有功能,请始终点击此文件。让我们看看这个文件是index.php。因此,所有功能请求都会转到index.php。但是对于功能A,参数不同 php?函数=a 对于功能b php?函数=b 还可以添加更多参数
现在,根据a、b和一组参数,一次性查看要包含的文件。如果选择不同的方式指定请求的页面,例如使用get变量,则可以使用一个模板。您可以在数据库中加载页面并指定每个包含的部分,然后使用一个php“模板引擎”从数据库中加载请求的页面并输出包含正确内容的模板。正如前面所说的,最好使用某种MVC框架。或者至少使用模板引擎(例如Smarty)。不过,对于90年代的人来说,你的例子还可以:)使用Zend或其他主流框架?你看过类似这样的东西吗?该页面上还有一些关于如何使用重写规则的提示。你的建议听起来很有趣。我想知道,如何设置所有功能请求都进入index.php?谢谢您的评论。他们帮了大忙。
function include_controller($page){
switch($page){
case "index":
require_once(realpath($config["directories"]["controllers"]."/index_.php"));
break;
case "checkout":
require_once(realpath($config["directories"]["controllers"]."/checkout_.php"));
break;
default:
break;
}
}
function include_controller($page){
if (file_exists($config["directories"]["controllers"]."/$page_.php")) {
// page exists, include it
require_once($config["directories"]["controllers"]."/$page_.php"));
} else {
// page not found
}
}
php_value auto_prepend_file "header.php"
php_value auto_append_file "footer.php"