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 [/].
No discussion
Add a comment
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.
Follow the comments:
|
