12

所以,我正在创建一个关于第一次世界大战的网站作为学校作业,我希望它出现在每个文档中:

<!DOCTYPE html>

<html>
<head>
    <title>1914</title>
    <script src="modernizr-1.5.js"></script>
    <link href="styles.css" type="text/css" rel="stylesheet" />
    <meta charset="utf-8" />

</head>
<body>
  <div id="container">
    <header>
    <img src="images/banner.png" alt="World War I" style="border: none"/>
    <nav>
        <ul>
        <a href="index.htm"><li><span>Home</span></li></a>
        <a href="1914.htm"><li><span>1914</span></li></a>
        <a href="1915.htm"><li><span>1915</span></li></a>
        <a href="1916.htm"><li><span>1916</span></li></a>
        <a href="1917.htm"><li><span>1917</span></li></a>
        <a href="1918.htm"><li><span>1918</span></li></a>
        </ul>
    </nav>
    </header>
    <section>
    <article>
    <br style="clear: both" />
    </article>
    <aside>
    </aside>
    </section>
    <footer style="font-weight: bold; letter-spacing: .1em">
    <a href="citations.htm">Citations</a> &bull;
    <a href="about.htm">About</a>
    </footer>
  </div>
</body>
</html>

我认为将所有这些内容复制粘贴到每个文档中,如果我只想更改一个单词或标签,那么煞费苦心地进入并分别更改每个页面是一种愚蠢的做法。有没有办法我可以把它放在 template.htm (或类似的东西)中,让 php 或 javascript 代码接受它并将所请求文件中的所有内容插入<article>标签内?我不太了解php,所以这对各位大师来说可能是小菜一碟,但我将不胜感激。

4

4 回答 4

24

使用 php 包括:

将此保存为 top.php

<html>
<head>
<title><?php echo $title; ?></title>
<script src="modernizr-1.5.js"></script>
<link href="styles.css" type="text/css" rel="stylesheet" />
<meta charset="utf-8" />

</head>
<body>
<div id="container">
<header>
<img src="images/banner.png" alt="World War I" style="border: none"/>
<nav>
    <ul>
    <a href="index.htm"><li><span>Home</span></li></a>
    <a href="1914.htm"><li><span>1914</span></li></a>
    <a href="1915.htm"><li><span>1915</span></li></a>
    <a href="1916.htm"><li><span>1916</span></li></a>
    <a href="1917.htm"><li><span>1917</span></li></a>
    <a href="1918.htm"><li><span>1918</span></li></a>
    </ul>
</nav>
</header>
<section>

将此另存为bottom.php

<aside>
</aside>
</section>
<footer style="font-weight: bold; letter-spacing: .1em">
<a href="citations.htm">Citations</a> &bull;
<a href="about.htm">About</a>
</footer>
</div>
</body>
</html>

那么您的个人页面将是这样的:

<?php $title = '1914'; include("top.php");?>
//This would be where you would make the changes that need to be made on each page.

<article>
<br style="clear: both" />
</article>

<?php include("bottom.php");?>
于 2012-10-25T15:34:54.307 回答
8

您可以考虑以下流行的模板引擎之一:

  • Smarty(变得过时)

  • 拿铁(主要由Nette社区使用)

  • Twig(主要由Symfony社区使用)

  • Mustache(这个模板引擎的官方实现存在于超过两​​打编程/脚本语言中)

我倾向于Mustache,主要是因为它有官方 JS 版本官方 Ruby 版本官方 Java 版本等。它允许您使用相同的模板前端和后端,这对于第一次渲染的小部件非常有用背景并在更新时在前台重新渲染。

于 2014-03-13T21:16:04.160 回答
2

将内容放入文件abc.php

然后将此添加到您想要所需内容的每个页面:

<?php
include("abc.php");
?>

因此,如果您的代码是:

<nav>
        <ul>
        <a href="index.htm"><li><span>Home</span></li></a>
        <a href="1914.htm"><li><span>1914</span></li></a>
        <a href="1915.htm"><li><span>1915</span></li></a>
        <a href="1916.htm"><li><span>1916</span></li></a>
        <a href="1917.htm"><li><span>1917</span></li></a>
        <a href="1918.htm"><li><span>1918</span></li></a>
        </ul>
    </nav>
    </header>
    <section>
    <article>
    <br style="clear: both" />
    </article>
    <aside>
    </aside>
    </section>

并且您希望<nav>在每个页面中重复其中的部分,您可以将内容放在abc.php<nav></nav>(包括标签)之间,并将abc.php包含在您的文件中,如下所示:

<?php
    include("abc.php");
?>
    </header>
    <section>
    <article>
    <br style="clear: both" />
    </article>
    <aside>
    </aside>
    </section>
于 2012-10-25T15:19:01.363 回答
0

将模板文件创建为单个文件,就像您已经拥有它一样,但在您想要内容的地方打印 PHP 变量。

例如:

....
<article>
<?php print $mainContent; ?>
</article>
....

然后编写一个PHP函数如下:

<?php
function insertContentIntoTemplate($mainContent) {
    require_once('/path/to/template.php');
}
?>

现在,您只需调用函数并将每个页面的内容传递给模板,就可以将页面内容加载到模板中。

因此,例如,1914.php 可能如下所示:

<?php
require_once('/path/to/insertFunction.php');

//the text could be loaded from a DB, or from another file, or just as a plain string like this:
$text = "The year was 1914, and the war was just starting.";

insertContentIntoTemplate($text);

?>

恭喜。您现在有了一个工作(尽管非常简单)的模板系统。根据需要向您的模板添加更多变量/占位符。

于 2012-10-25T15:55:59.510 回答