Примените модификатор Smarty к выходу блока


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

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

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

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

Author: Lazlo, 2011-06-29

4 answers

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

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

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

{truncate}{tr}...{/tr}{/truncate}
 7
Author: Gedrox, 2011-07-05 09:22:39

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}
 1
Author: JochenJung, 2011-07-05 06:52:54

То, как вы хотите, чтобы это делалось, не работает, это вызовет исключение 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}
 0
Author: Sascha Galley, 2011-07-05 09:14:14

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

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

 0
Author: Vanav, 2015-08-30 01:29:44