【问题标题】:HTML Templates -- php?HTML 模板——php?
【发布时间】:2012-10-15 19:48:26
【问题描述】:

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

<!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 代码把它插入 &lt;article&gt; 标签内的请求文件中的所有内容?我不太了解php,所以这对各位大师来说可能是小菜一碟,但我将不胜感激。

【问题讨论】:

  • 嗨 Code Monkey,你用什么软件来制作你的项目?我问的唯一原因是大多数 HTML 编辑器都带有一个称为“片段”的功能,它允许您添加您经常使用的任何代码,当您想要使用代码时,您通常只需从菜单中选择一个选项。 Dreamweaver、PHP Designer、PHP Storm、PHPEd 和其他大多数都具有此功能。如果您让我知道您的用途,我会尽力引导您朝着正确的方向前进
  • 看看MVC设计模式
  • @AronDraper 谢谢,但我不是在寻找 IDE 解决方案,而是在寻找可以放入文档中的一段代码。
  • 我希望我能对 cme​​ts 投反对票... MVC != 42... :)

标签: php html templates templating


【解决方案1】:

使用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");?>

【讨论】:

  • 个别页面仍会保存为 htm 还是 php?
  • 它们将被保存为 php,我刚刚意识到顶部模板中有错误。固定。
  • 是否需要在include前声明$title?
  • 你需要在include之前声明$title。
  • 是的,你们都说得对,说实话我不知道我在想什么。答案已更正,谢谢。
【解决方案2】:

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

  • Smarty(过时了)

  • Latte(主要由 Nette 社区使用)

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

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

我倾向于Mustache,主要是因为它有an official JS versionan official Ruby versionan official Java version 等。它允许您使用相同的模板前端和后端,这对于首先在后台渲染并在更新时在前台重新渲染的小部件非常有用。

【讨论】:

    【解决方案3】:

    将内容放入文件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>
    

    如果你想让&lt;nav&gt;里面的部分在每个页面中重复,你可以把&lt;nav&gt;&lt;/nav&gt;之间的内容(包括标签)放在abc.php里面并包含abc.php 在您的文件中像这样:

    <?php
        include("abc.php");
    ?>
        </header>
        <section>
        <article>
        <br style="clear: both" />
        </article>
        <aside>
        </aside>
        </section>
    

    【讨论】:

    • 这行不通,因为如果您只想编辑每个页面中的一行,那么即使很难,代码也会包含在每个页面中,您将无法看到执行此操作的代码。
    • 我认为您误解了这个问题。如果我只是将我拥有的内容复制/粘贴到 php 中,那不就是将页面内容添加到 php 内容的末尾吗?真正的问题:如何在&lt;article&gt; 标记内插入文档中的内容?
    【解决方案4】:

    将模板文件创建为单个文件,您已经拥有它,但在您想要内容的地方打印 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);
    
    ?>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      相关资源
      最近更新 更多