【问题标题】:Best practice for HTML head in PHPPHP中HTML头部的最佳实践
【发布时间】:2011-11-23 18:06:27
【问题描述】:

我目前有一个非常简单的页面,但有一些更复杂的后端。我一直这样做,但我觉得这是不对的。但我还没有想出对我有用的东西。

我有我的 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 &lt;head&gt;s,那么如果我想在每一页上都有描述该怎么办?我以前的文件设置如下: 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" />

但是,我认为这些文件是“碎片化的”。我不知道是否有一种普遍接受的方法,但如果有,我很想听听!

【问题讨论】:

    标签: php html


    【解决方案1】:

    我认为您正在寻找模板。

    虽然你几乎成功了,但你有点混淆了问题。只需将您的“设计部分”与“代码部分”分开即可。不要用header来完成实际代码的工作,一切都会变得像淡水一样清澈

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

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

    主要想法是让 PHP 脚本在所有数据准备好之前不输出 - 这样您将立即获得页面标题问题的解决方案。此外(考虑一下):

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

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

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

    我所说的模板是一个典型的 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>
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 看看fatfree.sourceforge.net等一些小而简单的PHP框架的结构和代码
      • @Mathias Bak 我对此了解不多,但无脂肪提到的“单文件”方法让我对性能感到紧张。他们为每个请求加载每一盎司的代码?我宁愿使用仅在使用这些类时才加载类的东西,但这只是他们的首页,所以谁知道呢。
      • maby fat free 是一个不好的例子,我不知道它是如何工作的,我的意思是看一个小的 MVC 框架可以得到一个很长的路要走。
      【解决方案3】:

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

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

      Header.php

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

      我认为这对你来说应该很好,同时仍然保留 K.I.S.S 原则。

      【讨论】:

      • 嗯,我不认为使用(在你的例子中似乎是)全局变量是“普遍接受的”......如果我错了,或者误解了你的例子,请纠正我.. .
      • 在一个文件中定义并在另一个文件中使用的变量,像这里应该避免,或者至少要非常小心地对待。当您在 1 年后回到您的代码时,您不记得它是如何工作的,而且如果文件像这样相互依赖,那将是一件痛苦的事情。所以我同意@Aerik
      • @MathiasBak 这就是 cmets 的用途。当您声明 $title 时,只需添加一条注释说明它将在 header.php 中使用,即使它们是一个接一个且不相隔 50 行,也没关系。
      • @Truth 但是你应该在哪里添加评论。在头文件中还是在其他文件中?如果您选择头文件,是否应该在每次包含新页面中的文件时更新您的评论?当您阅读包含标题的页面并查看变量时会怎样。它没有在任何地方使用,或者是吗?您必须搜索其他文件来清理您的代码。需要时间 = 金钱。
      • 显然,注释应该在您声明变量之后立即出现,因此任何阅读的人都可以看到它。也可以将它添加到包含的文件中,说它是“从父文件继承的”。我可能没有正确表达自己,这种方法在小型网站中很好,在更严重的大型网站中,您需要一个控制器。
      【解决方案4】:

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

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

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

      【讨论】:

      • 我喜欢简单地做一些功能的想法,我忽略了发送参数的想法。所以,您还说使用echo 'html...';,而不是?&gt;html...&lt;?php?如果是这样,这很有用,谢谢:)
      • 是的,这正是我要说的。当所有代码都是代码时,代码看起来更干净一些,并且当您将 html 包含在变量或函数中时,它可以让您更好地控制将其发送到客户端。这也是实现国际化的一步,但这对您来说可能不是一个因素。
      猜你喜欢
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 2015-05-25
      • 2014-07-22
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      相关资源
      最近更新 更多