void smarty_block_name( |
$params, | |
$content, | ||
&$smarty, | ||
&$repeat) ; |
array $params
;mixed $content
;object &$smarty
;boolean &$repeat
;Las funciones de bloque son funciones de forma: {func} .. {/func}. En otras palabras, estas encapsulan un bloque del template y operan el contenido de este bloque. Las funciones de bloque toman precedencia sobre las funciones habituales con el mismo nombre, es decir, usted no puede tener ambas, las funciones habituales {func} y las funciones de bloque {func} .. {/func}.
Por default la implementación de su función es llamada dos
veces por el Smarty: una vez por la etiqueta de apertura, y
la otra por la etiqueta de cierre
(vea &$repeat
abajo para ver como hacer
cambios a esto).
Solo la etiqueta de apertura de la función de bloque puede tener
atributos. Todos los atributos pasados a las funciones de template
estan contenidos en $params
como un arreglo
asociativo. Usted puede accesar a cualquiera de estos valores
directamente, e.g. $params['start']
.
Los atributos de la etiqueta de apertura son también son accesibles
a su función cuando se procesa la etiqueta de cierre.
El valor de la variable $content
depende de
que si su función es llamada por la etiqueta de cierre o de apertura.
En caso de que la etiqueta sea de apertura, este será
null
, si la etiqueta es de cierre el valor será
del contenido del bloque del template. Se debe observar que el bloque
del template ya a sido procesado por el Smarty, asi todo lo que usted
recibirá es la salida del template, no el template original.
El parámetro &$repeat
es pasado por
referencia para la función de implementación y proporciona
la posibilidad de controlar cuantas veces será mostrado el bloque.
Por default $repeat
es true
en la primera llamada de la block-function (etiqueta de apertura del
bloque) y false
en todas las llamadas subsecuentes
a la función de boque (etiqueta de cierre del boque). Cada vez que es
implementada la función retorna con el &$repeat
siendo true, el contenido entre {func} .. {/func} es evaluado y es
implementado a la función es llamada nuevamente con el nuevo contenido
del bloque en el parámetro $content
.
Si usted tiene funciones de bloque anidadas, es posible descubrir
cual es el padre de la función de bloque accesando la variable
$smarty->_tag_stack
.
Solo hacer un var_dump() sobre ella y la estrutura estara visible.
Vea tambien: register_block(), unregister_block().
Example 16.5. Función de bloque
<?php /* * Smarty plugin * ------------------------------------------------------------- * File: block.translate.php * Type: block * Name: translate * Purpose: translate a block of text * ------------------------------------------------------------- */ function smarty_block_translate($params, $content, &$smarty, &$repeat) { if (isset($content)) { $lang = $params['lang']; // do some intelligent translation thing here with $content return $translation; } } ?>