【问题标题】:PHP Template EnginePHP模板引擎
【发布时间】:2026-02-11 08:10:01
【问题描述】:

我一直在网上寻找构建模板引擎的教程。我知道存在许多引擎,例如 smarty、twig 和 pattemplate,它们可以完全满足我的需求,但我正在学习如何构建一个。我从一个将字符串添加到数组中的模板引擎开始,然后显示该数组。从那时起,我使用eval() 构建了一个(见下文)。

<// Define links & folders
define("ROOT_HTTP", "http://" . $_SERVER['HTTP_HOST'] . "/preprocessor");
define("TEMPLATE", "/template");

// Get the template file
$template = file_get_contents("template/template.php");

// Replace
$template = str_replace("<x Title x>", displayTitle(), $template);
$template = str_replace("<x Menu x>", displayMenu(), $template);
$template = str_replace("<x Content x>", displayContent(), $template);

$result = @eval("?>" . $template . "<?");

function displayMenu(){
    return "Link1<br />" . 
     "Link2<br />" . 
     "Link3<br />";
}

function displayTitle(){
     return "Site Title <?php echo date(\"m-d-y\", time()); ?>";
}

function displayContent(){
     return file_get_contents("content.php");
}

它运作良好,但不是我想要实现的目标。我想构建类似 Joomla 模板的东西,带有 &lt;jdoc:include type="component" /&gt; 之类的标签。我还希望它能够内联处理错误,这意味着它将显示错误的行号,或者当我调用echo "text" 时,它会在模板内的正确位置显示文本。

我如何按照这些思路创建一些东西?

【问题讨论】:

    标签: php templates


    【解决方案1】:

    http://www.phptal.org/ 听起来非常相似,并且具有良好的代码组织。如果上述系统的扩展不适合需要,它至少可以作为很好的教程使用

    【讨论】:

      【解决方案2】:

      首先:立即忘记使用带有类似 XML 标记的 TE 的想法。确实,乍一看可能看起来不错,但最终只会导致过多的工作,并且确实是有限的。

      其次,我显然建议您使用 Twig。它干净、快速、可扩展,并提供您需要的所有功能。

      最后:我写了一个小教程,如何编写一个简单但功能强大的 TE in another * question。这确实很简单,但对于较小的项目可能就足够了。

      【讨论】:

        【解决方案3】:

        我不能同意 NikiC 的观点。 XML 虽然是一种古老的语法,但非常强大,并带来了很多优势——其中之一就是它与正确编写的 HTML 相似。

        使用基于 XML 的模板语法没有任何限制。

        此外,虽然 Twig 确实是一个优秀而著名的项目,但它仍然缺乏一个非常好的分离范式。从模板内部犯错误,对整个应用程序造成损害,还是太危险太容易了。

        最后,最好的模板引擎——就像最好的 MVC 框架一样——是你真正感到舒服的那个。 我建议看一下 FigDice]1,它的灵感来自 PHPTal,但更进一步,它采用了一种独特的方法,为 Web 设计师(集成器、html-ist 等)提供了一个中心位置项目——比类似 Twig 的方法灵活得多。

        我很乐意阅读一些反馈。 谢谢

        【讨论】: