Le module DEFUNC propose plusieurs fonctions pour manipuler des "macros".
Il offre les fonctions suivantes:
- defunc : déclare une fonction macro
- sparam : récupère les paramètres donnés à une macro
- sparam_num : récupère le nombre de paramètres passés à une macro
- mapparam : affecte les paramètres passés à des variables globales
- mapparaml : affecte les paramètres passés à des variables locales
- function_exists : détermine l'existence d'une fonction
- anonfunc et evalanonfunc : utilisation des fonctions anonymes
Astuce :
valeur de retour d'une fonction
defunc
La fonction ~defunc() permet de déclarer une fonction "macro".
Elle prend 2 arguments :
- name : le nom de la macro
- code : la fonction de cette macro
Exemple :
~defunc('fonction',~get('valeur'))
Appel d'une macro
L'appel d'une macro se fait exactement de la même manière que pour n'importe quelle autre fonction Templeet. Il suffit de mettre un tilde devant et de passer les paramètres entre parenthèses.
Exemple :
~set("result",~fonction())
sparam
La fonction ~sparam() permet de récupérer les paramètres donnés à une "macro".
Elle accepte un seul paramètre :
- numparam : le numéro du paramètre de la macro.
Exemple :
~defunc('cherche',~preg("~sparam(1)","~sparam(2)"))
~cherche("abc","abcdef")
~sparam(1) va prendre alors la valeur
"abc", et ~sparam(2)
"abcdef".
Le résultat sera donc : ~preg("abc","abcdef")
sparam_num
La fonction ~sparam_num() permet de récupérer le nombre de paramètres passés à une "macro".
Exemple :
~defunc('ma_fonction',"le nombre de paramètres passés à ma_fonction est ~sparam_num()")
~ma_fonction("abc","abcdef")
retournera:
le nombre de paramètres passés à ma_fonction est 2
mapparam
La fonction ~mapparam() permet d'affecter les paramètres donnés à une "macro" à des variables globales.
Elle prend en paramètre(s) le nom des variables à affecter.
Exemple :
~defunc('ma_fonction2',
{
~mapparam('var1','var2','var3'),
<![TEXT[
les paramètres passés sont :
var1: ~get('var1')
var2: ~get('var2')
var3: ~get('var3')
]TEXT]>
}
)
~ma_fonction2("paramètre1","paramètre2")
retournera:
les paramètres passés sont :
var1: paramètre1
var2: paramètre2
var3:
mapparaml
La fonction ~mapparaml() permet d'affecter les paramètres donnés à une "macro" à des variables locales.
Elle prend en paramètre(s) le nom des variables à affecter.
Sont fonctionnement est identique à ~mapparam() à part que les variables affectées seront locales au lieu d'être globales.
function_exists
La fonction ~function_exists() permet de savoir si une fonction existe ou non.
Elle prend en paramètre le nom de la fonction à tester.
Sont fonctionnement est similaire à la fonction PHP du même nom mais la fonction Templeet teste à la fois les macros définies par l'utilisateur, les fonctions Templeet ainsi que les fonctions PHP.
anonfunc
La fonction ~anonfunc() permet de créer une fonction anonyme.
Une fonction anonyme est une fonction qui n'a pas de nom mais dont on peut affecter le code à une variable pour une utilisation ultérieure.
~set("mafonction",~anonfunc("ceci est une fonction anonyme"))
evalanonfunc
La fonction ~evalanonfunc() permet d'utiliser une fonction anonyme.
~set("mafonction",~anonfunc("ceci est une fonction anonyme"))
évaluation de la fonction anonyme stockée dans la variable "mafonction": ~evalanonfunc(~get("mafonction"))
retournera:
évaluation de la fonction anonyme stockée dans la variable "mafonction": ceci est une fonction anonyme
Astuce
"Définir la valeur de retour d'une fonction" :
Prenons le cas suivant : je souhaite qu'une fonction effectue un certain traitement et renvoie le résultat.
Exemple de script qui ne fonctionne pas !
~defunc("mafonction",
'~rem('
~set("a", )
~set("b", )
~set("res", ~plus(~get("a"), ~get("b")))
')~array(
"a"=>~get("a"),
"b"=>~get("b"),
"res"=>~get("res")
)'
)
~print_r(
~mafonction(3, 7)
)
Le rendu de ce script est :
Array
En effet, ce script ne renvoie pas le tableau, mais une chaîne de caractères qui contient "Array".
Pour que la fonction renvoie un tableau, il faut utiliser un bloc "Accolade", comme dans l'exemple suivant :
~defunc("mafonction",
{
~set("a", ),
~set("b", ),
~set("res", ~plus(~get("a"), ~get("b"))),
~array(
"a"=>~get("a"),
"b"=>~get("b"),
"res"=>~get("res")
)
}
)
~print_r(
~mafonction(3, 7)
)
Le rendu de ce script est :
Array
(
[a] => 3
[b] => 7
[res] => 10
)
Télécharger
FAQ
