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}