What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
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; } }