在Smarty中将标签放在字符串的一部分周围

时间:2014-09-30 14:03:34

标签: php smarty smarty3

我从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文件中,因为每页将有多个模板

2 个答案:

答案 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"