Si un visiteur laisse un commentaire (message de forum), en indiquant l’URL d’un site, mais sans préciser le nom du site, la boucle suivante :
<BOUCLE0(FORUMS){id_forum}>
[<a href="(#URL_SITE)" class="spip_out">
(#NOM_SITE)
</a>]
</BOUCLE0>
n’affiche rien, et le lien, bien que présent, n’est pas cliquable.
Avec la version 1.7, une solution consisterait à remplacer (#NOM_SITE)
par (#NOM_SITE|sinon{"Voir le site..."})
. Mais on peut faire mieux avec la 1.8.
Solution A : nouveau filtre
Depuis le 13 janvier 2005, on dispose d’un filtre « ? » permettant précisément de tester si une balise est vide. La syntaxe est [(#BALISE|?{si_non_vide,si_vide})]
. Notez que les deux alternatives sont séparées par une virgule ’,’ comme dans les filtres SPIP (et non par un deux-points ’ :’ comme dans l’opérateur ternaire PHP correspondant A ? B : C ).
<BOUCLE0(FORUMS){id_forum}>
[<a href="(#URL_SITE)" class="spip_out">[(#NOM_SITE|?{#NOM_SITE,#URL_SITE})]</a>]
</BOUCLE0>
Solution B : surcharger la balise
Cette solution consiste à surcharger la balise #NOM_SITE pour qu’elle fournisse le nom du site si il a été donné par le visiteur, et sinon, à le fabriquer à partir de l’url du site. C’est plus compliqué mais permet au passage de metre en forme le texte de l’url.
Dans le fichier mes_fonctions.php3 (*** Vérifier si c’est pas mes_options.php3 SVP, Minh ***, oui je confirme que c’est bien mes_fonctions.php3 comme pour les filtres, YvesGrenier), il faut ajouter les deux fonctions suivantes qui permet de redéfinir la balise #NOM_SITE :
function mon_calcul_balise_nom_site($nom_site, $url_site) {
if (strlen($nom_site) == 0) {
if (ereg('http://(.*)',$url_site,$regs)) {
$nom_site = $regs[1];
if (ereg('/$',$nom_site))
$nom_site = substr($nom_site,0,strlen($nom_site)-1);
}
else
$nom_site =$url_site;
}
return $nom_site;
}
function balise_NOM_SITE($p) {
$_nom_site = champ_sql('nom_site', $p);
$_url_site = champ_sql('url_site', $p);
$p->code = "mon_calcul_balise_nom_site($_nom_site, $_url_site)";
$p->statut = 'html';
return $p;
}
La première fonction (mon_calcul...) retourne le champ nom_site si il est non vide. Sinon, on récupère l’url en retirant les lettres « http:// » si on les trouve au début, et en retirant un « / » final si nécessaire.
La seconde fonction est celle qui surcharge la balise. Les deux premières instructions récupèrent les deux champs nom_site et url_site. La troisième indiquera au compilateur la fonction qui sera utilisée pour choisir entre les deux champs.
(Minh) Questions : Pourquoi les _ devant nom_site et _url_site ? Pourquoi tu mets pas [/]$ dans la première expression régulière pour simplifier ? Tu voudrais raccourcir en calcul_nom_site ?
(YvesGrenier) Réponses : j’ai choisi des noms de variables proches de nom_site et url_site, mais différents, pour éviter la confusion avec le nom du champ (je ne sais pas si il y a un risque pour le compilateur, mais le risque est au moins pour le programmeur). Mettre un « _ » devant est un moyen simple de le faire. Pour la deuxième question : je n’ai pas utilisé la première expression régulière pour éliminer aussi l’éventuel « / » de la fin d’url parce que j’arrivais à une ambiguité. Mettre simplement ’http://(.*)[/]$’ eliminerait les chaînes ne se terminant pas par « / ». Il faudrait alors utiliser une expression régulière qui serait ’http://(.*)[/] ?$’ où le point d’interrogation permettrait d’éliminer un ou zéro caractère « / », mais le résultat est ambigu, car une chaîne se terminant par « / » peut aussi bien être interprétée en mettant le « / » dans la sélection (.*) ou dans [/].
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |