2011-03-19 72 views
1

一些基本的东西,我不明白:HTML标签质疑

header.php与我的网站导航栏。在里面,有一个<head>...</head>部分。

现在,在我的网站互相页,我使用require_once 'header.php'使每一个页面将显示在导航栏。 ,我还需要具体<head>...</head>部分到不同的页面。

例如,在页customers.php中,我使用<script>...</script>来包含jQuery库。我不需要将其包含在其他页面中。

现在,在网上搜索我看到多头标签是错误的语法

那么,如何才能的人:

  1. 避免多重 “头” 标签
    WHILE
  2. 分离他的作品以不同的PHP文件,包括他们?
+0

你是什么意思“避免多个标签”? – Tim 2011-03-19 10:54:20

+0

您好蒂姆,我很抱歉,我已经重新编辑了这个问题(没有意识到StackOverflow的格式化规则)。我很感激如果你现在可以再读一遍,它会更清晰:) – Israel 2011-03-19 11:03:36

+0

本网站编辑器顶部有一个明亮的'?'按钮。下次点击它,它有很多格式化的信息。 – Mat 2011-03-19 11:04:52

回答

1

你必须改变你的页面结构并使用模板秒。
不要在代码顶部加载标题,而必须在底部加载标题! 页面代码不应该输出一个单词,而是收集变量中的所有数据。 只有在输出可以通过调用模板启动之后。

甲示例布局将是这样的:

首先。页面本身。
它输出什么但只收集所需数据,并调用模板:

<? 
//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.php"; 
include "template.php"; 
?> 

接下来,template.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.php是实际的页面模板:

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

容易,清洁和可维护。

有在这样的方法很多优点:

  • 的要求,你可以填充实际的页面相关的数据头。
  • HTTP标头也可以在任何输出之前发送。它包括cookies,会话,缓存控制等等。
  • 今天是2011年。 AJAX时代。您可能希望更改您的代码以返回JSON数据而不是整个HTML页面。使用这种布局将会很容易。
  • 想象一下,您将用不同的设计创建非常类似的网站。您将只需更改模板,不要触摸引擎文件。这对于使用模板来说非常有利。
+0

谢谢Col!我认为我理解这个概念。事实上,我认为这是最佳做法。 – Israel 2011-03-19 11:50:44

+0

@adler谢谢。我已经添加了一些其他的好处,从这种布局。并且有许多其他 – 2011-03-19 12:17:55

+0

Col.,所以用这种方式你也会在页面本身设置类似$ head_scripts =“ ...”的内容,然后在之间的模板中回显它...? – Israel 2011-03-19 16:26:32

0

这里有一些简单的方法,你可以看看。

  • 你可以拥有jQuery的在不需要它的网页 ;一旦它下载了 它将被缓存,所以它 仍然不会使用更多的带宽。

  • 你可以搬出从header.php文件收盘</head> 标签和关闭 <head>标签在多数民众赞成包括 的header.php页面。

  • 您可以包括JavaScript的网页上的任何地方 ,不仅在标题中。

你也可以这样做。 你做require_once 'header.php';之前你把一个叫$jquery = true;

变量在你的header.php文件,你是否$jquery设置为true,如果是,你包括jQuery的。

+0

谢谢安德烈,我将检查js缓存2.从头部移动/头会禁用我把标题中的正文内容。来自“现代汉英综合大词典”把普通的js功能放在头上是合法的做法吗? 4.好主意(使用变量)。再次感谢 – Israel 2011-03-19 11:48:01

0

中的header.php 你可以象这样

<head>  
<?php echo $script; ?> 
</head> 

然后在customers.php 可以先指定变量

$script = '<script>...</script>' 

然后

require_once 'header.php' 
0

一个可能的解决方案。

  1. 在包含header.php之前,您创建了一个全局变量。
  2. 您在header.php中测试此变量。
  3. 如果它是真的,你打印脚本或其他东西。事情是这样的:

    <!-- Fragment of header.php --> 
    <?php if ($i_want_jquery): ?> 
    <script ...> 
    ... 
    </script> 
    <?php endif; ?> 
    

。另一方面,模板可能是一个更好的解决方案。