Block Functionsvoid smarty_block_namearray $paramsmixed $contentobject &$smarty
Funções de Block são funções da forma: {func} .. {/func}. Em outras palavras, ele enclausura
um bloco de template e opera no conteúdo deste bloco. Funções de Block tem precedência sobre
funções customizadas com mesmo nome,
assim, você não pode ter ambas, função customizável {func} e
função de Bloco {func} .. {/func}.
Por definição a implementação de sua função é chamada duas vezes pela Smarty: uma vez pela tag de abertura,
e outra pela tag de fechamento
(veja &$repeat abaixo para como mudar isto).
Apenas a tag de abertura da função de bloco pode ter atributos.
Todos os atributos passados para as funções de
template estão contidos em $params como um array associativo. Você pode ou acessar
esses valores diretamente, i.e. $params['start']
ou usar extract($params)
para importá-los para dentro da tabela símbolo. Os atributos da tag de
abertura são também acessíveis a sua função
quando processando a tag de fechamento.
O valor da variável $content
depende de que se sua função é chamada pela tag de
fechamento ou de abertura. Caso seja a de abertura, ele será
null, se for a de fechamento
o valor será do conteúdo do bloco de template.
Note que o bloco de template já terá sido processado pela
Smarty, então tudo que você receberá é saída do template, não o template original.
O parâmetro &$repeat é passado por
referência para a função de implementação
e fornece uma possibilidade para ele controlar quantas
vezes o bloco é mostrado. Por definição
$repeat é true na primeira chamada da block-function
(a tag de abertura do bloco) e false
em todas as chamadas subsequentes à função de bloco
(a tag de fechamento do bloco). Cada vez que a
implementação da função retorna com o &$repeat
sendo true, o conteúdo entre {func} .. {/func} é avaliado
e a implementação da função é chamada novamente com
o novo conteúdo do bloco no parâmetro $content.
Se você tem funções de bloco aninhadas, é possível
descobrir qual é a função de bloco pai acessando
a variável $smarty->_tag_stack. Apenas faça um var_dump()
nela e a estrutura estaria visível.
See also:
register_block(),
unregister_block().
função de bloco
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File: block.translate.php
* Type: block
* Name: translate
* Purpose: translate a block of text
* -------------------------------------------------------------
*/
function smarty_block_translate($params, $content, &$smarty)
{
if (isset($content)) {
$lang = $params['lang'];
// do some intelligent translation thing here with $content
return $translation;
}
}