Php 在块输出上应用Smarty修改器

Php 在块输出上应用Smarty修改器,php,smarty,block,modifier,Php,Smarty,Block,Modifier,我试图将修饰符(truncate,在我的例子中)应用于块(一个tr块,即一个翻译块)的输出。我没有tr作为修饰符,因为它不便于HTML标记 我真的不知道我应该使用什么样的语法,也不知道它是否被允许(考虑到,我对块的使用可能有点古怪) 诸如此类,如果有意义的话: {{tr}非常长的文本我想被翻译然后被截断{/tr}{/tr}truncate}如果你不能以你喜欢的方式组合它们。我唯一的想法是,将您自己的截断函数与translate函数一起编写: function do_translation($pa

我试图将修饰符(
truncate
,在我的例子中)应用于块(一个
tr
块,即一个翻译块)的输出。我没有
tr
作为修饰符,因为它不便于HTML标记

我真的不知道我应该使用什么样的语法,也不知道它是否被允许(考虑到,我对块的使用可能有点古怪)

诸如此类,如果有意义的话:


{{tr}非常长的文本我想被翻译然后被截断{/tr}{/tr}truncate}

如果你不能以你喜欢的方式组合它们。我唯一的想法是,将您自己的截断函数与translate函数一起编写:

function do_translation($params, $content, $smarty, &$repeat) {
  if (isset($content)) {
    $options = $params["options"];
    $content = yourTranslateFunction($content);
    if ($options['truncate']) $content = yourTruncateFunction($content);
    return $content;
  }
}
$smarty->registerPlugin("block", "tr", "do_translation");
然后您可以在Smarty中调用它,如下所示:

{tr truncate="1"}Really long text I want to be translated then truncated{/tr}
$smarty->registerPlugin('block', 'tr', 'do_translation', true);
$smarty->registerPlugin('block', 'truncate', 'do_truncation', true);
{capture assign="var"}{tr}...{/tr}{/capture}
{$var|truncate}

您希望它执行的方式不起作用,这将抛出一个带有语法错误的Smarty异常。但您可以像这样组合多个块函数:

{tr truncate="1"}Really long text I want to be translated then truncated{/tr}
$smarty->registerPlugin('block', 'tr', 'do_translation', true);
$smarty->registerPlugin('block', 'truncate', 'do_truncation', true);
{capture assign="var"}{tr}...{/tr}{/capture}
{$var|truncate}
在模板文件中,按以下方式组合:

{truncate}{tr}Really long text I want to be translated then truncated{/tr}{/truncate}

可以这样做:

{tr truncate="1"}Really long text I want to be translated then truncated{/tr}
$smarty->registerPlugin('block', 'tr', 'do_translation', true);
$smarty->registerPlugin('block', 'truncate', 'do_truncation', true);
{capture assign="var"}{tr}...{/tr}{/capture}
{$var|truncate}
但我个人会创建截断块函数并这样做

{truncate}{tr}...{/tr}{/truncate}

这适用于Smarty 2和Smarty 3:

{t}非常长的文本我想被翻译然后被截断{/t | truncate:10}