php - 使用 PHP include 分隔网站内容

标签 php layout

我正在寻找有关将网站内容分成逻辑 block 的最佳做法的建议。我想要一个在整个站点中保持不变的页眉和页脚,这样如果我有几个不同内容的页面,它们都会如下所示 - 对页眉和页脚所做的更改然后自动更新,而无需更改每个单独的页面。

<?php
include 'header.php';
?>
<body>
    <p>page content here</p>
</body>
<?
include 'footer.php';
?>

header.php将包含开头 <html> , <head>和静态内容,以及 footer.php将包含任何额外的静态内容和结束 </html>标签。所以,我的问题是:这是一个好方法吗?我担心传播 <html>跨多个文件的标签是不好的做法。如果是这样,处理这种设计的正确方法是什么?

最佳答案

不对,你的做法是错误的。
以下是您设计中的主要错误:

  1. 您假设 header.php 会在每次页面调用时被调用。这是错误的。
  2. 您假设 header.php 始终是静态的。那是错误的。
  3. 您忘记为页面本身创建模板。

每个人都必须牢记的主要规则:

在所有数据准备就绪之前,无需将单个字符发送到浏览器。

为什么?

  • 今天是 2011 年。 AJAX时代。如果您的代码必须发送 JSON 数据而不是整个 HTML 页面怎么办?
  • 有一个东西叫HTTP header .有时我们必须发送它们。如果您已经发送了华丽的 HTML header ,这将变得不可能。
  • 它仅适用于 4 页的网站。好的。想象一下,您很幸运,收到了另一个 4 页站点的请求。您将只需要更改模板,不要触及引擎文件。这真是一个很大的好处。
  • 假设您要定制一个 <title>根据页面内容为您的页面添加标签。这不是很常见的事情吗?但是如果不使用模板就无法做到。

因此,您必须有一个包含页眉和页脚的通用站点模板,以及每个 php 脚本的专用模板。

一个示例布局将是这样的:

.1。页面本身。

什么都不输出,只是收集所需的数据并调用模板:

<?php
//include our settings, connect to database etc.
include dirname($_SERVER['DOCUMENT_ROOT']).'/cfg/settings.php';
//getting required data
$DATA=dbgetarr("SELECT * FROM links");
$pagetitle = "Links to friend sites";
//etc
//and then call a template:
$tpl = "links.tpl.php";
include "template.php";
?>

.2。 template.php这是您的主要网站模板,

由页眉和页脚组成:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>My site. <?=$pagetitle?></title>
</head>
<body>
<div id="page">
<?php include $tpl ?>
</div>
</body>
</html>

.3。最后 links.tpl.php是实际的页面模板:

<h2><?=$pagetitle?></h2>
<ul>
<?php foreach($DATA as $row): ?>
<li><a href="<?=$row['link']?>" target="_blank"><?=$row['name']?></a></li>
<?php endforeach ?>
<ul>

简单、清洁和可维护。

关于php - 使用 PHP include 分隔网站内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5183163/

相关文章:

php - 允许用户使用通配符的安全性

css - 为所有 div 添加clearfix 有什么缺点吗?

html - 在 flex 背景环境中居中容器

jquery - 如何在两个基于 Jquery 的布局之间切换(使用桌面和移动设备时)

html - 两列布局,其中主要内容 DIV 的宽度是可变的(使用所有可用空间 100%)

java - Swing:实现完全可扩展组件的好方法是什么?

php - 简单的 PDO 查询返回内存大小错误

php - 将 wordpress 帖子 ID 添加到 div

javascript - 如何在 Bootstrap 模式中编写表单的成功消息?

javascript - sql count函数返回对象作为laravel中的输出