在块输出上应用Smarty修改器

时间:2011-06-29 17:50:29

标签: php smarty block modifier

我正在尝试将修饰符(在我的例子中为truncate)应用于块的输出(tr块,即转换块)。我没有tr作为修饰符,因为它不便于HTML标记。

我真的不知道我应该使用什么样的语法,也不知道它是否被允许(给定,我对块的使用可能有点时髦)。

这样的话,如果有意义的话:

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

4 个答案:

答案 0 :(得分:8)

可以这样做:

{capture assign="var"}{tr}...{/tr}{/capture}
{$var|truncate}

但我个人会创建截断块功能并执行此操作

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

答案 1 :(得分:1)

Afaik你不能按照自己喜欢的方式组合它们。我唯一的想法是将你自己的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}

答案 2 :(得分:0)

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

$smarty->registerPlugin('block', 'tr', 'do_translation', true);
$smarty->registerPlugin('block', 'truncate', 'do_truncation', true);

在模板文件中,以这种方式组合:

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

答案 3 :(得分:0)

这适用于Smarty 2和Smarty 3:

{t}Really long text I want to be translated then truncated{/t|truncate:10}