BaliseNomSite

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

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 [/].

Dernière modification de cette page le 7 mars 2007

Discussion

Aucune discussion

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom