Применить модификатор Smarty на выходе блока - PullRequest
7 голосов
/ 29 июня 2011

Я пытаюсь применить модификатор (в моем случае truncate) к выходу блока (блок tr, то есть блок перевода). У меня нет tr в качестве модификатора, потому что это не удобно для разметки HTML.

На самом деле я не знаю, какой синтаксис мне следует использовать, и не разрешен ли он (учитывая, что использование блоков может быть немного странным).

Что-то в этом роде, если это имеет смысл:

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

Ответы [ 4 ]

8 голосов
/ 05 июля 2011

Это можно сделать так:

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

Но я лично создал бы функцию усечения блока и сделал бы это

{truncate}{tr}...{/tr}{/truncate}
1 голос
/ 05 июля 2011

Афаик, ты не можешь комбинировать их так, как тебе нравится. Единственная идея, которую я имею, это написать свою собственную функцию усечения вместе с вашей функцией перевода:

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}
0 голосов
/ 30 августа 2015

Это работает для Smarty 2 и Smarty 3:

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

0 голосов
/ 05 июля 2011

Способ, которым вы хотите, не работает, это вызовет исключение 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}
...