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

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

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