void smarty_block_name( |
$params, | |
$content, | ||
&$smarty) ; |
array $params
;mixed $content
;object &$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().
Example 16.5. 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; } }