2011-06-29 13 views
6

Estoy intentando aplicar un modificador (truncate, en mi caso) a la salida de un bloque (un bloque tr, es decir, un bloque de traducción). No tengo tr como modificador porque no es conveniente para el formato HTML.Aplicar el modificador Smarty en la salida de bloque

Realmente no sé qué tipo de sintaxis que debe utilizar, ni si está permitido (dado, mi uso de los bloques podría ser un poco raro).

Algo así, si tiene algún sentido:

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

Respuesta

7

Se podría hacer de esta manera:

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

Pero personalmente crearía función de bloque truncado y hacer esto

{truncate}{tr}...{/tr}{/truncate} 
1

que sabemos, se les no puede combinar a su gusto. La única idea que tengo, es escribir su propia función truncado con su función 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"); 

entonces se podría invocar en Smarty como esto:

{tr truncate="1"}Really long text I want to be translated then truncated{/tr} 
0

La forma en que quiere que haga no funciona, esto arrojará una excepción Smarty con un error de sintaxis. Pero se puede combinar múltiples funciones de bloque de esta manera:

$smarty->registerPlugin('block', 'tr', 'do_translation', true); 
$smarty->registerPlugin('block', 'truncate', 'do_truncation', true); 

en el archivo de plantilla, se combinan de esta manera:

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

Esto funciona para Smarty Smarty 2 y 3:

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