2011-06-29 18 views
6

Bir değiştiriciyi (benim durumumda truncate) bir bloğun çıktısına (bir tr bloğu, yani bir çeviri bloğu) uygulamaya çalışıyorum. HTML biçimlendirmesi için uygun olmadığından bir değiştirici olarak tr'um yok.Blok çıkışında Smarty değiştirici uygula

Ne tür bir sözdizimi kullanmam gerektiğini ve izin verilip verilmediğini gerçekten bilmiyorum (verilen blok kullanımlarım biraz garip olabilir).

Böyle bir şey, herhangi bir mantıklı olup olmadığını: Eğer bunları istediğiniz şekilde birleştirmek olamaz Afaik

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

cevap

7

Böyle yapılabilir:

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

Ama kişisel olarak kesilmiş blok fonksiyonunu yaratacak ve bunu

1

.

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"); 

Sonra böyle Smarty bunu uygulayarak herhangi:

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

bunu yapmak istediğiniz şekilde ben sadece fikir sizin tercüme fonksiyonu ile birlikte kendi truncate İşlevini yazmaktır çalışmaz, bu bir Sözdizimi Hatası ile bir Smarty Özelliği atar. Lütfen şablon dosyasında

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

bu şekilde birleştirmek: Ama böyle birden blok fonksiyonları birleştirebilirsiniz

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

Bu Smarty 2 ve Smarty 3 için çalışır:

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