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
;
Les fonctions de blocs sont des fonctions de la forme {func} .. {/func}
.
En d'autres mots, elles englobent des blocs de template et opèrent sur les
contenus de ces blocs. Les fonctions de blocs ont la priorité sur les
fonctions utilisateurs
de même nom, ce qui signifie que vous ne
pouvez avoir une fonction utilisateur {func}
et une fonction de bloc
{func}..{/func}
.
Par défaut, l'implémentation de votre fonction est appelée deux fois par Smarty :
une fois pour la balise ouvrante et une autre fois pour la balise
fermante (voir $repeat
ci-dessous
sur la façon de modifier ce comportement).
Seule la balise ouvrante d'une fonction de bloc peut avoir des
attributs.
Tous les attributs passés par le template aux fonctions de templates sont
contenus dans le tableau associatif $params
.
Votre fonction a aussi accès aux attributs de la balise
ouvrante quand c'est la balise fermante qui est exécutée.
La valeur de la variable $content
est différente
selon si votre fonction est appelée pour la balise ouvrante ou la
balise fermante. Si c'est pour la balise ouvrante, elle sera à NULL
et si c'est la balise fermante,
elle sera égale au contenu du bloc de template. Notez que le bloc de template
aura déjà été exécuté par Smarty, vous recevrez donc la sortie du
template et non sa source.
Le paramètre $repeat
est passé
par référence à la fonction d'implémentation et fournit la possibilité
de contrôler le nombre d'affichage du bloc. Par défaut,
$repeat
vaut
TRUE
lors du premier appel à la fonction de bloc (le bloc d'ouverture du tag) et
FALSE
lors de tous les autres appels à la fonction
de bloc (le bloc de fermeture du tag). Chaque fois que la fonction
d'implémentation retourne avec le paramètre
$repeat
vallant TRUE
, le contenu situé
{func}...{/func}
est évalué et la fonction d'implémentation est appelé
une nouvelle fois avec le nouveau bloc de contenu en tant que paramètre
$content
.
Si vous imbriqué des fonctions de bloc, il est possible de connaître
la fonction de bloc parente grâce à la variable $smarty->_tag_stack
.
Faîtes un var_dump()
dessus et la structure devrait apparaître.
Example 16.5. Fonction de bloc
<?php /* * Smarty plugin * ------------------------------------------------------------- * Fichier : block.translate.php * Type : bloc * Nom : translate * Rôle : traduire un bloc de texte * ------------------------------------------------------------- */ function smarty_block_translate($params, $content, &$smarty, &$repeat) { // n'affiche que lors de la balise fermante if(!$repeat){ if (isset($content)) { $lang = $params['lang']; // effectuer une bonne traduction ici avec $content return $translation; } } } ?>
Voir aussi :
register_block()
et
unregister_block()
.