Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何改进此模板系统?_Php_Templates - Fatal编程技术网

Php 如何改进此模板系统?

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

目前,我有一个基本的HTML模板文件。当我想要创建一个新页面时,我会复制模板并在特定标记之间放置一些
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">&nbsp;</div>
            <div id="footer_cell3">&nbsp;</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"