当前位置:  开发笔记 > 编程语言 > 正文

PHP模板

如何解决《PHP模板》经验,为你挑选了2个好方法。

我在PHP中编写了一个简单的模板层,但是我有点陷入困境.以下是它的工作原理:

首先,我使用fetch_template从数据库加载模板内容 - 这是有效的(如果你感兴趣,我会在启动时收集所有模板).

我在模板代码和逻辑中使用PHP变量 - 例如:

// PHP:
$name = 'Ross';

// Tpl:

Hello, my name is $name.

然后我使用output_template(下面)解析模板中的变量并替换它们.以前我使用模板标签和美化str_replace模板类,但效率太低.

/**
 * Returns a template after evaluating it
 * @param   string  $template   Template contents
 * @return  string  Template output
 */
function output_template($template) {
    eval('return "' . $template . '";');
}

我的问题,如果你还没有猜到,是变量没有在函数内声明 - 因此函数不能解析它们,$template除非我把它们放在全局范围内 - 我不确定我想做什么.那个或者有一个变量数组作为函数中的参数(听起来更乏味但可能).

有没有人在我的代码中使用函数代码(它只是一个单行代码)而不是使用函数?

谢谢,罗斯

Ps我知道Smarty和那里的各种模板引擎 - 我不打算使用它们所以请不要建议它们.谢谢!



1> 小智..:

您可以使用而不是通过循环include($template_name).

或者,如果您想要模板输出的内容,您可以执行以下操作:

$template_name = 'template.php';

// import the contents into this template
ob_start();
include($template_name);
$content = ob_get_clean();

// do something with $content now ...

请记住,在您的模板中,您可以使用经常被忽视的PHP语法:


A is equal to 5

替代语法可用于if,while,for,foreach和switch ...非常适合操作模板中的数据.有关更多详细信息,请参阅" 控制结构的替代语法 ".



2> Dave Vogt..:

我传递一个带变量的关联数组来替换,然后解析它们.

然后你也可以通过$ _GLOBALS来实现相同的结果.

function output_template($template, $vars) {
    extract($vars);
    eval('return "' . $template . '";');
}

编辑:您可能还需要考虑字符串替换而不是eval,具体取决于允许编写模板的人员以及指定要加载的模板的人员.那么逃避也可能存在问题......

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有