6

我想让我的新项目的开发更容易,我想要一个非常简单的模板引擎解决方案。我在网上环顾四周,一切要么太臃肿,要么让我畏缩。

我的 HTML 文件将如下所示:

<html>
    <head>
        <title>{PAGE_TITLE}</title>
    </head>
    <body>
        <h1>{PAGE_HEADER}</h1>
        <p>Some random content that is likely not to be parsed with PHP.</p>
    </body>
</html>

显然,我想用我用 PHP 设置的东西来替换{PAGE_TITLE}和。{PAGE_HEADER}像这样:

<?php

    $pageElements = array(
                            '{PAGE_TITLE}' => 'Some random title.',
                            '{PAGE_HEADER}' => 'A page header!'
                         );

?>

我会使用类似的东西str_replace并将替换的 HTML 加载到字符串中,然后将其打印到页面上?这就是我目前正在做的事情......有没有人有任何建议或方法可以让我做得更好?

谢谢。

4

5 回答 5

6

您当前的策略将起作用,并且非常简单。 str_replace()高效且干净,您可以简单地循环它以将精确的标签匹配替换为您的变量内容。但是,缺点是您必须首先将所有模板加载到字符串中,这可能非常低效。

另一种非常相似的替代方法是您可以简单地使用extract()。Extract 将获取一组键/值对,并在本地范围内从它们中创建变量。如果您include()在同一范围内使用模板,则您的变量将准备就绪。

像这样的东西:

function loadTemplate($template,$vars)
{
    extract($vars);
    include($template);
}

您的模板可能只是普通的 PHP。

<html>
    <head>
        <title><?php echo $PAGE_TITLE ?></title>
    </head>
    <body>
        <h1><?php echo $PAGE_HEADER ?></h1>
        <p>Some random content that is likely not to be parsed with PHP.</p>
    </body>
</html>

(显然,您可以使用短标签来减少模板冗长,尽管出于兼容性原因我不喜欢这样做。)

那么你所要做的就是:

$pageElements = array(
                        'PAGE_TITLE' => 'Some random title.',
                        'PAGE_HEADER' => 'A page header!'
                     );
loadTemplate('file.phtml',$pageElements);
于 2010-04-02T00:15:35.857 回答
5

您可能对mustache.php感兴趣。它是Mustache的真正轻量级 PHP 类实现

从自述文件中获取的快速示例:

<?php
    include('Mustache.php');
    $m = new Mustache;
    echo $m->render('Hello {{planet}}', array('planet' => 'World!'));
    // "Hello World!"
?>

还有一个更深入的例子——这是规范的 Mustache 模板:

Hello {{name}}
You have just won ${{value}}!
{{#in_ca}}
Well, ${{taxed_value}}, after taxes.
{{/in_ca}}
于 2010-04-02T02:08:50.073 回答
2

如果你想变得非常简单,PHP 本身就是一个模板引擎。只需使用include()

文件.phtml:

<html>
    <head>
        <title><?=$tpl['PAGE_TITLE']?></title>
    </head>
    <body>
        <h1><?=$tpl['PAGE_HEADER']?></h1>
        <p>Some random content that is likely not to be parsed with PHP.</p>
    </body>
</html>

代码.php:

tpl = Array 
(
'PAGE_HEADER' => "This is the lazy way to do it",
'PAGE_TITLE' => "I don't care because i am doing it this way anyways"
)
include("file.phtml")
于 2010-04-02T00:06:11.903 回答
0

使用支持块、循环、ifset(也适用于循环)和旋转的此类模板引擎。工作速度快。最适合中小型项目。

http://www.phpclasses.org/package/1216-PHP-Template-engine-blocks-loops-ifset-rotations.html

于 2013-12-02T07:18:54.230 回答
0
function parseVars($vars, $file){

    $file = file_get_contents($file);
    foreach($vars as $key => $val){
        str_replace("{".$key."}", $val, $file);
    }

    echo $file;

}
于 2010-11-18T02:19:04.087 回答