Примените модификатор Smarty к выходу блока
Я пытаюсь применить модификатор (truncate
, в моем случае) к выходу блока (блок tr
, то есть блок перевода). У меня нет tr
в качестве модификатора, потому что это неудобно для разметки HTML.
Я действительно не знаю, какой синтаксис мне следует использовать, и разрешено ли это (учитывая, что мое использование блоков может быть немного странным).
Что-то в этом роде, если это имеет какой-то смысл:
{{tr}Really long text I want to be translated then truncated{/tr}|truncate}
4 answers
Это можно было бы сделать так:
{capture assign="var"}{tr}...{/tr}{/capture}
{$var|truncate}
Но я лично создал бы функцию усечения блока и сделал бы это
{truncate}{tr}...{/tr}{/truncate}
Afaik вы не можете комбинировать их так, как вам нравится. Единственная идея, которая у меня есть, - это написать свою собственную функцию усечения вместе с функцией перевода:
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 с синтаксической ошибкой. Но вы можете объединить несколько функций блока следующим образом:
$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}
Это работает для Smarty 2 и Smarty 3:
{t}Really long text I want to be translated then truncated{/t|truncate:10}