带有变量的PHP模板类?

Joe*_*Joe 6 php templates class str-replace

我想让我的新项目更容易开发,我想要一个非常简单的模板引擎解决方案.我在网上四处看看,一切都太臃肿了,还是让我畏缩不前.

我的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>
Run Code Online (Sandbox Code Playgroud)

很显然,我要替换{PAGE_TITLE}{PAGE_HEADER}与东西我设置用PHP.像这样:

<?php

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

?>
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

zom*_*bat 6

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

另一种非常相似的方法是你可以简单地使用extract().Extract将采用一组键/值对,并在本地范围内创建变量.如果您include()是同一范围内的模板,那么您的变量就可以使用了.

像这样的东西:

function loadTemplate($template,$vars)
{
    extract($vars);
    include($template);
}
Run Code Online (Sandbox Code Playgroud)

您的模板可能只是普通的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>
Run Code Online (Sandbox Code Playgroud)

(显然你可以使用短标签来减少模板的冗长,尽管我不愿意出于兼容性原因.)

那么你所要做的就是:

$pageElements = array(
                        'PAGE_TITLE' => 'Some random title.',
                        'PAGE_HEADER' => 'A page header!'
                     );
loadTemplate('file.phtml',$pageElements);
Run Code Online (Sandbox Code Playgroud)


wha*_*lad 5

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

从README中获取的简单示例:

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

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

Hello {{name}}
You have just won ${{value}}!
{{#in_ca}}
Well, ${{taxed_value}}, after taxes.
{{/in_ca}}
Run Code Online (Sandbox Code Playgroud)


Byr*_*ock 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>
Run Code Online (Sandbox Code Playgroud)

代码.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")
Run Code Online (Sandbox Code Playgroud)