所以,我需要一个模板引擎,用于编写电子邮件,使用带有条件逻辑的标记(简单)(不太容易)。
示例:Hello{if first_name} dear {first_name}{endif}, blah blah blah.
如果first_name不可用,则应显示为:Hello, blah blah blah.
我能够使用eval让它工作......但我们都知道eval是邪恶的。
$body = preg_replace('/{if ([^{\|}]+)}/i', '<?php if(isset(\$tokens[\'$1\'])):?>', $body);
$body = preg_replace('/{endif}/i', '<?php endif;?>', $body);
有人能指点我这个教程吗?除了简单的令牌替换外,我似乎找不到任何东西。
答案 0 :(得分:0)
如上所述,我会使用Mustache.js,它应该完成你需要的一切。如果你想要的只是“令牌替换和条件逻辑”,那么可以使用Mustache来提供:
令牌替换
Hello {{first_name}}
条件逻辑
尽管Mustache.js自称为“无逻辑”,但
我们称之为“逻辑无”,因为没有if语句,else子句或for循环。
您可以在控制器中进行基于逻辑的决策,然后将这些决策传递给视图 - 请参阅How do I accomplish an if/else in mustache.js?。所以,在你的情况下,这样的事情应该有效:
function( view ){
if ( logged_in ) {
var user = {
first_name: "Jane",
last_name: "Doe"
};
} else {
var user = {
first_name: "Buddy"
};
}
// more template stuff...
}
答案 1 :(得分:0)
使用每个人的评论,我能够弄清楚如何使用自定义语法快速创建自己的安全模板引擎。
如果设置了{first_name|buddy}
,我想让{$first_name|default:"buddy"}
成为first_name变量,但如果未设置,则使用字符串&#34; buddy&#34;默认情况下。
使用强大的模板引擎,如Smarty。 Smarty支持这一点,但我不喜欢语法preg_replace('/{([\w\s]+)\|([\w\s]+)}/', '{\$$1|default:"$2"}', $content);
使用正确的语法
替换所有出现的自定义语法{{1}}
然后通过Smarty运行它。这与使用eval基本相同,但是安全。谢谢你们。