Ca n’est à coup sûr pas une question de portée des constantes, parce qu’une règle fondamentale de PHP c’est que les constantes ont une portée globale… une fois qu’elles sont définies.
D’où l’hypothèse que cette constante n’est définie que lorsqu’on a donné le paramètre var_mode=calcul.
Tu peux le vérifier comme moi en insérant ce petit bout de code dans le d’un squelette :
_STATUT_AUTEUR_RUBRIQUE:
<?php
if(defined('_STATUT_AUTEUR_RUBRIQUE')) {
echo 'defined, value = "'._STATUT_AUTEUR_RUBRIQUE.'"';
} else {
echo 'unknown';
}
?>
Effectivement, ça répond “unknown” dans le cas général, et ça rend la valeur si on a mis var_mode=calcul.
(idem avec var_mode=recalcul et var_mode=debug, d’ailleurs)
Moralité :
- c’est le choix de Spip, qui a besoin de cette constante seulement dans les cas var_mode=calcul/recalcul/debut, et on n’y peut rien
- il faut donc chercher une autre source Spip pour l’information que tu veux utiliser
Etant plus PHPiste que Spipien, je laisse à d’autres le soin de répondre à la partie 2, mais à mon avis ça ne doit pas être un gros deal…
Fred
From: Peetdu
Sent: Friday, July 25, 2014 1:38 PM
To: spip@rezo.net
Subject: Re: [Spip] Utilisation des constantes dans l’espace publique
Bonjour,
Je ne pense pas que ce soit une question de syntaxe SPIP,mais plutôt une
question de portée des constantes dans les squelettes SPIP de la partie
publique.
Ce que je ne comprend pas, c’est pourquoi mon code fonctionne avec
…?var_mode=calcul et sinon me renvoi l’erreur « Couldn’t find constant
_STATUT_AUTEUR_RUBRIQUE » ?
P.
Le 24/07/2014 18:23, Ybbet Spip a écrit :
Bonjour,
As-tu essayé avec #EVAL ?
Soit [(#EVAL{_STATUT_AUTEUR_RUBRIQUE}|explode{‹ , ›})]
Ybbet
Le 24 juillet 2014 17:29, Peetdu <peetdu@gmail.com
mailto:peetdu@gmail.com> a écrit :
Oupsss…j’ai oublié de préciser que j’utilise SPIP 3.0.16
merciii
P.
Le 24/07/2014 17:12, Peetdu a écrit :
Bonjour
je viens d’écrire le bout de code suivant (en partie pompé depuis le
fichier /prive/formulaires/inc-__instituer_auteur.html) :
#SET{statuts_auteurs,#VAL{___STATUT_AUTEUR_RUBRIQUE}|__constant|explode{‹ , ›}}
puis…
[(#SESSION{statut}|in_array{#__GET{statuts_auteurs}}|oui)
…
]
Mais cela me renvoi l’erreur PHP suivante :
Warning: constant() [function.constant]: Couldn’t find constant
_STATUT_AUTEUR_RUBRIQUE in
/tmp/cache/skel/html___ec6f7545d091ead95b9fec2d037637__37.php on
line 78
Cette erreur disparait avec ?var_mode=calcul
D’où ma question : est-il possible d’utiliser des constantes
dans les
squelettes ?
Peetdu
liste spip
spip@rezo.net mailto:spip@rezo.net - désabonnement : envoyer un
mail à spip-off@rezo.net mailto:spip-off@rezo.net
Infos et archives : http://listes.rezo.net/__mailman/listinfo/spip
http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net
http://archives.rezo.net/spip.mbox/
Documentation de SPIP : http://www.spip.net/
Irc : de l’aide à toute heure : http://spip.net/irc
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Discuter chez rezo.net
Documentation de SPIP : http://www.spip.net/
Irc : de l’aide à toute heure : http://spip.net/irc