Hello,
Dans le plugin Rainette, je distingue les données non fournies par le service météo des données indisponibles pour un certain laps de temps.
Pour ce faire, j’initialise le tableau associatif à null et je remplis les données configurées comme fournies par le service. De fait, les données non fournies reste à null et quand je les affiche avec leur unité en appelant la fonction rainette_afficher_unite() je repère le null et n’affiche rien. Par contre, quand je repère la chaine vide (indisponible) j’affiche N/D pour dire que c’est temporairement indisponible.
Tout cela est bien beau mais j’ai un souci avec table_valeur() dans certains modèles car je fais des affichages du type :
[
<:rainette:precipitation|ucfirst:>
(#VALEUR{heure/#GET{index_heure}/precipitation}|rainette_afficher_unite{precipitation, -1, #ENV{extras/service}})
C’est un cas où l’index [heure][0][precipitation] stocke la valeur null.
Or dans la fonction table_valeur() le code suivant est déroulé, sachant que la variable $defaut est égale à la chaine vide :
} elseif (is_array($table)) {
$table = isset($table[$k]) ? $table[$k] : $defaut;
}
Mais comme la fonction isset() identifie si une variable est définie ET est différent de null le résultat fait que $table prend la valeur chaine vide de défaut et écrase donc ma valeur null.
J’affiche donc N/D et non rien comme prévu dans le modèle.
Ce comportement de table_valeur() est-il voulu ?
Si non, il faudrait distinguer le fait que la variable n’est pas définie et la variable est null ce qui résoudrait mon problème.
Si oui, je ne vois pas comment m’en sortir simplement sachant que je ne peux pas connaitre le défaut lors de la compilation du modèle sans entrer dans une usine à gaz.
Vos avis ?