PHP中HTML头的最佳实践

时间:2011-11-23 18:06:27

标签: php html

我目前有一个非常简单的页面,有一些更复杂的后端。我总是以同样的方式做到这一点,但我觉得这不对。但我对我没有多大帮助。

我有我的index.php,header.php和function.php。 index.php包含header.php,它调用function.php中的函数。我不确定的主要问题是如何使网站足够动态,以便可以轻松编辑页面,而且易于编辑是需要编辑的重要部分。
的index.php

<?php
session_start();
include_once 'header.php';
?>
// Page content
</body>
</html>

的header.php

<!DOCTYPE HTML>
<html lan="en">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<?php
require_once 'functions.php';
getBar(); // Top of page bar with menu/login etc
?>

我不认为显示functions.php会增加那么多。我知道我不应该在我的文件中使用2 <head>,所以如果我想在每个页面上都有描述,我该怎么办?我以前的文件设置如下: 的index.php

<?php
session_start();
include_once 'header.php';
?>
// extra page specific stuff here, such as description or JS
</head>
<body>
<?php
require_once 'functions.php';
getBar(); // Top of page bar with menu/login etc
?>
// Page content here
</body>
</html>

的header.php

<!DOCTYPE HTML>
<html lan="en">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="style.css" type="text/css" />

但是,我认为文件是“碎片化的”。我不知道是否有一种普遍接受的做法,但如果有,我很乐意听到它!

4 个答案:

答案 0 :(得分:11)

您正在寻找模板。

虽然你几乎把它钉了下来,但是你正在混合一些事情。只需将“设计部件”与“代码部件”分开即可。不要让标题完成实际代码的工作,一切都变得像淡水一样清晰

我建议您进行以下设置:
网站包含

  • 主配置文件(假设它类似于你的functions.php)
  • 主网站模板
  • 实际页面(或部分) - 不同目的的实际php脚本。每个由两部分组成:
    • 脚本本身,进行所有数据挖掘和准备,初始化所有变量
    • 一个模板,仅执行数据输出的工作。

主要思想是让PHP脚本在所有数据准备就绪之前不进行输出 - 这样您就可以立即获得页面标题问题的解决方案。 (考虑一下):

  • 您将能够发送任何HTTP标头,Cookie,启动会话等。
  • 您还可以动态更改整个输出外观:例如XML或JSON而不是HTML
  • 您将能够为不同的网站使用相同的代码库,只更改模板

一旦php脚本完成数据准备,它就会调用主站点timplate,而后者将包含实际的页面模板。

因此,您将得到您所要求的 - 网站动态足以让它可以轻松编辑页面,而且易于编辑是需要编辑的重要部分 - 以及更多其他好处。

模板我说的是一个典型的PHP脚本,但是,主要由纯HTML组成,只有一些PHP代码才能显示动态生成的数据。

这里有一些基本但有效的例子

页面:

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

其中main.tpl.php是您的主要网站模板,包括常见部分,如页眉,页脚,菜单等:

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

links.tpl.php是实际的页面模板:

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

答案 1 :(得分:9)

我认为最有经验的程序员会告诉您尽可能少地混合代码和HTML。这意味着完成所有计算,然后将视图所需的任何变量传递给视图。

他们还会告诉您调查MVC设计模式。在PHP中,这是Controller类接受初始请求,在正确的业务Model类和&amp ;;上执行正确操作的地方。然后将所需的数据传递给View类,这将呈现您的HTML。

MVC可以从非常简单的3类变体转变为极其复杂的“框架”,如Zend Framework。如果您自己构建,请查看PHP类自动加载,因为它将使您的生活更轻松。

答案 2 :(得分:4)

小网站 中普遍接受的方法 是这样的:

<?php $title = 'Title'; ?>
<?php require_once('header.php'); ?>

的header.php

<title><?php echo $title; ?> - MyWebsite</title>

我认为这应该对你有用,同时仍然保留K.I.S.S原则。

答案 3 :(得分:2)

我所做的是制作以数组作为参数的页眉和页脚函数,并且数组可能包含可选元素,因此您可以将标题等传递给标题函数。

我认为你会发现“被普遍接受”的一件事就是越来越多地使用PHP作为一个程序,而当你只需要动态内容时,就不再需要使用PHP了。换句话说,将所有内容编写为输出html的程序,而不是混合使用html和php(打开和关闭PHP标记)。

在这个模型中,许多网站只有一个“index.php”,实际上生成所有页面(通常来自数据库)。但是,如果你只有少量页面,那么每个页面都有自己的php页面,共享页眉和页脚功能是一个很好的方法,恕我直言。