我从MySQL
数据库中获取字符串。示例字符串:
'
{something}Lorem ipsum{/something} dolor sit amet, consectetur adipiscing elit.
Scrupulum, inquam, abeunti;
{blablabla}Illa tamen simplicia{blablabla}, vestra versuta.
Non semper, inquam; Sed mehercule pergrata mihi oratio tua.
Stoici scilicet. Scrupulum, inquam, abeunti;
'
在php中,我将字符串分配给一个Smarty变量,如下所示:
$smarty->assign('homePageText', $string);
现在,我希望能够在模板中做这样的事情:
{$homePageText}
{something}
<a href="http://www.domain.com/" class="foo">{$}</a>
{/something}
{blablabla}
<b class="bar"><i>{$}</i></b>
{/blablabla}
{/$homePageText}
因此字符串将变为:
'
<a href="http://www.domain.com/" class="foo">Lorem ipsum</a> dolor sit amet, consectetur adipiscing elit.
Scrupulum, inquam, abeunti;
<b class="bar"><i>Illa tamen simplicia</i></b>, vestra versuta.
Non semper, inquam; Sed mehercule pergrata mihi oratio tua.
Stoici scilicet. Scrupulum, inquam, abeunti;
'
这样您就可以在Smarty模板中的变量部分周围放置标记。Smarty 3.0中已经有这样的功能了吗?或者,我如何在php5.4中将其构建到smarty中?我希望在我的模板中尽可能少地使用php代码。此外,{something}<tag>{$}</tag>{/something}
部分不应该在php文件中,因为每页将有多个模板
我在类似的设置中使用了一个简单的replace
修饰符。但我认为这种方法既不优雅也不灵活。无论如何,我的数据库中的字符串看起来是这样的:
'%something1%Lorem ipsum%something2% dolor sit amet, consectetur adipiscing elit.
Scrupulum, inquam, abeunti;
%blablabla1%Illa tamen simplicia%blablabla2%, vestra versuta.
Non semper, inquam; Sed mehercule pergrata mihi oratio tua.
Stoici scilicet. Scrupulum, inquam, abeunti;'
模板中的代码看起来是这样的(去掉换行符!):
{$homePageText|replace:'%something1%':'<a href="http://www.domain.com/" class="foo">'
|replace:'%something2%':'</a>'
|replace:'%blablabla1%':'<b class="bar"><i>'
|replace:'%blablabla2%':'</i></b>'
}
我在一个场景中使用它,其中翻译来自数据库表,但一些HTML标记或URL在模板中是硬编码的。
顺便说一句:你可以用regex_replace
一步插入开始和结束标记,但这并不能真正提高可读性。。。
|regex_replace:'/%something1%(.*)%something2%/':'<a href="http://www.domain.com/" class="foo">''1</a>'
我为Smarty:添加了一个插件
class SmartyPlugins {
public static function addTags($string, $search, $openingTag, $closingTag) {
return str_replace(
'{/' . $search . '}',
$closingTag,
str_replace(
'{' . $search . '}',
$openingTag,
$string
)
);
}
}
//register the plugin
$smarty->registerPlugin('modifier', 'addTags', array('SmartyPlugins', 'addTags'));
现在我可以在模板中这样做:
{$var|addTags:'a':'<a href="http://domain.com">':'</a>'} //changes "Test {a}blablabla{/a} something" to "Test <a href="http://domain.com">blablabla</a> something"