我从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中是否已经有这样的功能?或者我如何在php 5.4中将其构建为smarty?我想在我的模板中尽可能少的PHP代码。此外,{something}<tag>{$}</tag>{/something}
部分不应该在php文件中,因为每页将有多个模板
答案 0 :(得分:1)
我在类似设置中使用简单的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在模板中是硬编码的。
btw:您可以使用regex_replace
一步插入开始和结束标记,但它并没有真正提高可读性......
|regex_replace:'/%something1%(.*)%something2%/':'<a href="http://www.domain.com/" class="foo">\\1</a>'
答案 1 :(得分:0)
我为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"