Aller au contenu

Ancrer un texte en lien de façon auto


Trevis03

Sujets conseillés

Bonjour,

A l'instar de ce qui se fait beaucoup sur les forums ou blogs. Comment à partir d'un texte qui est posté par un tiers dans un forum, puis je créer une fonction automatique afin que si les mots clés qui m'intéressent dans le texte soient transformés en ancre ?

Ex : une personne post dans mon forum : "j'aime bien cette guitare car elle à un bon son." Et que moi en tant qu'admin le mot 'guitare' m'intéresse pour ancrer un lien vers une page de mon site. L'ancre se fait de façon automatique

merci de vos réponses

Modifié par Trevis03
Lien vers le commentaire
Partager sur d’autres sites

Salut Trevis,

A priori comme ça, je te dirai qu'il te faut premièrement un tableau de correspondances entre mot clé et article correspondant. Ce tableau peut-être une simple variable dans le php, ou carrément une table dans la base de données.

Ensuite, chaque fois qu'un commentaire est posté, il faut faire passer le commentaire dans une fonction qui va remplacer les mots clé par les liens correspondants, en utilisant la syntaxe de ton site (bbcode, html, etc)

Lien vers le commentaire
Partager sur d’autres sites

Tu peux regarder du côté de ce qui est fait pour le plugin WordPress Keyword Autolink par exemple, c'est exactement le principe que tu décris.

Lien vers le commentaire
Partager sur d’autres sites

Voici un bout de code que j'utilise pour un de mes sites (definition est un objet...) :


function add_link_definition($html) {
global $count,$def;
// les éléments html à exclure
static $balises_exclues=array('h[1-6]','a');

// le traitement regex
if(!is_array($html)) {
if(!is_string($html)) return $html;
$balises=implode('|',$balises_exclues);
$mots=implode('|',array_map('preg_quote',$def->getKeywords()));
$regex='#<('.$balises.')[\s>].+?</\1>|<[^>]+>|(?<=\W)('.$mots.')(?=\W)#si';
return preg_replace_callback($regex,__FUNCTION__,$html);
}
if(isset($html[2])&& $count == 0){
$count++;
return '<a href="/definitions/'.clean_url($def->getWord()).'-'.$def->getId().'.html">'.$html[0].'</a>';
}
else{
return $html[0];
}
}

	
foreach($definitions as $definition){
$def=$definition;
$count = 0;
$string = add_link_definition($string);
}

Lien vers le commentaire
Partager sur d’autres sites

Contrairement à ce qu'on trouve sur les sites qui utilisent cette bidouille, je mettrais une condition pour limiter le nombre de liens.

Au lieu de faire bêtement des liens sur tous les mots clés identiques sur la page, il suffit de lier les 2 ou 3 premières occurrences ou même seulement la première pour être plus naturel, donc plus efficace.

Lien vers le commentaire
Partager sur d’autres sites

Contrairement à ce qu'on trouve sur les sites qui utilisent cette bidouille, je mettrais une condition pour limiter le nombre de liens.

Au lieu de faire bêtement des liens sur tous les mots clés identiques sur la page, il suffit de lier les 2 ou 3 premières occurrences ou même seulement la première pour être plus naturel, donc plus efficace.

Bonjour,

Si vous aviez lu le code, vous auriez vu qu'il ne créé un lien que pour la première occurrence.

Lien vers le commentaire
Partager sur d’autres sites

En quoi est-il plus naturel de faire un lien uniquement sur la première occurrence ? Les gens ne lisent pas forcément un article à partir du début (surtout s'ils cliquent sur "Aller à" sur Google qui les amène dans un paragraphe de la page, ou même sur n'importe quel lien qui les amène sur une ancre précise à l'intérieur de la page), un lien est une invitation à prendre plus d'informations sur le mot linké, etc. Sur Wikipedia, ils font souvent un lien sur chaque occurrence d'un mot, même si le mot apparaît 20 fois dans l'article. Je ne prends pas Wikipédia comme modèle, loin de là, mais sur ce point précis, je ne pense pas qu'on puisse dire ni que ce n'est pas naturel, ni que ça pénalise leur référencement.

Ce qui n'est pas naturel, selon moi, c'est d'avoir différents libellés de liens pour des liens qui pointent vers une même page. Sauf si ces liens pointent vers des ancres précises dans cette page bien sûr, et dans ce cas ça prend tout son intérêt.

Lien vers le commentaire
Partager sur d’autres sites

Dans le cas particulier de Trevis03 (faire automatiquement des liens dans le contenu des messages de son forum), je pense que l'idéal serait de ne même pas faire de liens du tout. Qui écrit le message? Un visiteur du forum. Transformer un mot en lien, c'est transformer ce que la personne a écrit, ce n'est pas très respectueux. Qui nous dit qu'il va approuver les pages qui seront ainsi linkées ? Le visiteur sera-t-il content de constater que son propre message est rempli de liens vers des pages qu'il ne connaît pas, peut-être même avec des pages sur lesquelles il serait en désaccord complet ?

Lien vers le commentaire
Partager sur d’autres sites

Si vous aviez lu le code, vous auriez vu qu'il ne créé un lien que pour la première occurrence.

Effectivement, je n'ai pas regardé le script.

Mon conseil était d'ordre général (merci _AT_Karnabal)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...