7

我正在尝试将修饰符 ( truncate,在我的情况下) 应用于块的输出(一个tr块,即翻译块)。我没有tras 修饰符,因为它不方便 HTML 标记。

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

类似的东西,如果它有任何意义:

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

4

4 回答 4

8

可以这样做:

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

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

{truncate}{tr}...{/tr}{/truncate}
于 2011-07-05T09:22:39.460 回答
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}
于 2011-07-05T06:52:54.287 回答
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}
于 2011-07-05T09:14:14.223 回答
0

这适用于 Smarty 2 和 Smarty 3:

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

于 2015-08-30T01:29:44.973 回答