Génération automatique de liens internes

Nouveau WRInaute
Bonjour,

Je souhaite développer mes liens internes, pour cela je pensais à une sorte de glossaire qui renverrai des mots clés vers certaines de mes pages. 1 mot clé = 1 page.
Je souhaiterai remplacer ces mots à la volée, d'où mes questions!

Avec des fonctions style str_replace ou strtr ca ne devrait pas poser trop de probleme pour mes pages.
Par contre comment le faire sur n'importe quel page (ex celle de mon forum) sans tout modifier.
Je pensais à du javascript mais je n'ai aucune idée sur comment le faire.

Existe t il des scripts tout prêt qui le font?
Avez vous des bouts de code pour le faire?
Est ce réalisable sans trop surcharger le serveur?

C'est tout :)

Ludo
 
WRInaute impliqué
L'idée me séduit aussi, et suis dans la même optique. J'ai tenté de développer un petit script mais en vain.
Si d'autres personnes ont une piste, je suis preneur aussi.

Merci par avance
 
WRInaute discret
Cette idée me séduit aussi, et si je devais mettre en place, je commencerais par créer une table de correspondance avec les champs mot-clé, url, correspondance active (j'aime bien pouvoir tout activer / désactiver quand ça me chante :D ).
Une table ou un simple fichier texte...

Ensuite je rajouterais une fonction dans la class template que j'utilise ( une antiquité, style celle utilisée par phpBB ) qui remplacerait les mots-clés par le lien correspondant avec un simple str_replace et deux tableaux.
 
WRInaute passionné
Si tes textes sont dans une base de donnée, tu as un appel à la base pour afficher les textes. J'ai par exemple une fonction "affiche_message($id,$langue)"
Dans cette fonction, tu rajoutes un traitement de ta chaine.
Je ne sais pas ce qui est le mieux : stockage en base ou non. Ca risque de faire un appel à mysql pour quelque chose qui est plus ou moins statique.

Attention, si tu as beaucoup de mots clefs, tu auras pas mal de remplacement.
Attention aussi si tu as des mots clefs composés.
Avec des expression régulière, tu devrais aussi pouvoir limiter le nombre d'affichage.

François
 
Nouveau WRInaute
Salut Ckarone,

Est il possible de profiter de ton travail?
Autant ne pas réinventer la roue. De plus de cette manière tu pourras avoir des critiques/remarques/avis sur ton code :)

Et pour la 2ème partie de ma question: Comment le faire de manière transparente sur n'importe quelle page. D'ou ma réflexion de le faire en Javascript.

Ludo
 
WRInaute discret
Je déconseille de le faire en javascript, d'une part ça fait faire du traitement au client qui devrait être fait côté serveur...
D'autre part si c'est en javascript, google captera pas tes liens internes.
 
WRInaute impliqué
Merci pour le lien et pour les conseils.
Petite question de geek en php:

Code:
$texte = preg_replace('`\b((joueur)s?)\b`si','<strong><a href="../joueur/index.php">$1</a></strong>',$texte);

Est-ce que cela dois être placé dans une class ? include ?
 
WRInaute occasionnel
Dans mon cas les liens automatiques ne seront affichés que sur un seul type de page dans un paragraphe.
Code:
$sql1=" SELECT texte,id,... FROM matable";
$result1 = mysql_query($sql1) or die (mysql_error());
$texte = utf8_decode(stripslashes(mysql_result($result1, 0, 'texte')));

$sql2=" SELECT motcle,id,... FROM matablecle";
$result2 = mysql_query($sql2) or die (mysql_error());

while($row=mysql_fetch_assoc($result2)){

$texte = preg_replace('`\b(('.$row['motcle'].')s?)\b`si','
<a href="ma-page-'.$row['id'].'.html">'.$row['motcle'].'</a>',$texte);
}
echo $textet ;
Voilà ce que cela peut donner en s'inpirant du post donné en lien plus haut.
 
WRInaute passionné
pcamliti a dit:
Merci pour le lien et pour les conseils.
Petite question de geek en php:

Code:
$texte = preg_replace('`\b((joueur)s?)\b`si','<strong><a href="../joueur/index.php">$1</a></strong>',$texte);

Est-ce que cela dois être placé dans une class ? include ?

Si tu as ton script php

Code:
<?php

print $texte ;

; ?>

tu le remplaces par
Code:
<?php
$texte = preg_replace('`\b((joueur)s?)\b`si','<strong><a href="../joueur/index.php">$1</a></strong>',$texte);

print $texte ;

; ?>

C'est le plus simple. Après, tu peux avoir classe, fonction etc comme tu veux
 
WRInaute impliqué
En clair pour un débutant je recopie

Code:
<?php
$texte = preg_replace('`\b((joueur)s?)\b`si','<strong><a href="../joueur/index.php">$1</a></strong>',$texte);

print $texte ;

; ?>

Dans mon fichier php et tout les textes ici "joueur" deviendront des liens ...
 
WRInaute occasionnel
Je dois être un peu lent mais j'ai pas bien compris le but de la manoeuvre :oops: et j'aime pas quand je comprends pas :p

EDIT : c'est pour faire une sorte de clickintext ?
 
WRInaute impliqué
Oui mais avec liens internes.... si tu as des mots clés importants dans texte style actualités... les liens apparaissent directes sans devoir <a href...></a> etc sur tous les mots

voilà encore des fainéants
 
WRInaute discret
Ouais enfin, fainéants... Ca dépend de la substance à traiter. Si ça concerne quelques pages OK, mais il arrive bien un stade où cette automatisation prend son sens ;)
 
WRInaute passionné
Elvis a dit:
Ouais enfin, fainéants... Ca dépend de la substance à traiter. Si ça concerne quelques pages OK, mais il arrive bien un stade où cette automatisation prend son sens ;)

De plus, cela permet de varier les mots-clefs suivant la saison.
 
WRInaute accro
Arrgg pourquoi n'y ai-je pas pensé avant ?... :twisted:


Sur mon blog (Dotclear) ça pourrait le faire, en link avec les images de mon site photo ! Je le fais quand j'y pense à la main lors de la rédaction des articles, mais c'est longuet !
 
WRInaute passionné
Normalement preg_replace supporte l'entrée de tableau en argument. Mais dans mon cas, cela ne marche.

Code:
function InsererLien ($texte,$pattern,$url_replacement)
{
$texteremplace="$1";
$TexteLien = preg_replace('`\b(('.$pattern.')s?)\b`si','<a href="'.$url_replacement.'">'.$texteremplace.'</a>',$texte);
return $TexteLien;
}
$texte="le petit chat mange.";
$pattern="petit";

$url_replacement='http://www.photos-suede.com/';


$text= InsererLien ($texte,$pattern,$url_replacement);
print $text;


marche.

Mais pas :

Code:
function InsererLien ($texte,$pattern,$url_replacement)
{
$texteremplace="$1";
$TexteLien = preg_replace('`\b(('.$pattern.')s?)\b`si','<a href="'.$url_replacement.'">'.$texteremplace.'</a>',$texte);
return $TexteLien;
}
$texte[]="le petit chat mange.";
$pattern[]="petit";

$url_replacement='http://www.photos-suede.com/';


$text= InsererLien ($texte,$pattern,$url_replacement);
print $text;
 
WRInaute accro
Ou autre problème possible la présence des mots en question dans les URL des éventuels liens insérés dans le texte.

<a href="cadeau-de-noel.php">Cadeau de noel</a>

Sauf bien sur si c'est uniquement un "plain text" qui est traité par la fonction.. si c'est un texte qui contient des caractères HTML, ça va devenir déjà beaucoup plus compliqué
 
WRInaute accro
et puis, pensez un peu à l'internaute : avoir 10 liens dans 3 lignes, on finit par s'y perdre.
Ca me rappelle le début de l'hypertexte, il y a une vingtaine d'années : on était tellement content de cette possibilité que toutes les pages en étaient truffées, rendant la lecture assez indigeste. Au bout de 3 clicks, on ne savais même plus de quoi causait l'article initial
 
WRInaute accro
Leonick a dit:
et puis, pensez un peu à l'internaute : avoir 10 liens dans 3 lignes, on finit par s'y perdre.
Ca me rappelle le début de l'hypertexte, il y a une vingtaine d'années : on était tellement content de cette possibilité que toutes les pages en étaient truffées, rendant la lecture assez indigeste. Au bout de 3 clicks, on ne savais même plus de quoi causait l'article initial

Je pensais aussi a ce problème et je me disais que si la liaison entre les pages était essentiellement une question de référencement, on peut toujours se débrouiller pour confondre les liens ainsi généré avec le texte via le CSS.
La lecture n'est donc pas brouillée et le côté technique est mis en place.
 
WRInaute accro
zeb a dit:
si la liaison entre les pages était essentiellement une question de référencement, on peut toujours se débrouiller pour confondre les liens ainsi généré avec le texte via le CSS.
là, on arrive du côté obscur de la chose. Google pas aimer ça :lol:
 
WRInaute accro
Leonick a dit:
zeb a dit:
si la liaison entre les pages était essentiellement une question de référencement, on peut toujours se débrouiller pour confondre les liens ainsi généré avec le texte via le CSS.
là, on arrive du côté obscur de la chose. Google pas aimer ça :lol:

google-is-evil.jpg


Hummm ! en effet
 
WRInaute passionné
Suede

preg_replace à un parametre "limit"


Je lis sur http://fr3.php.net/preg_replace que la fonction est de la forme

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit [, int &$count ]] )

Que signifie le mixes, et le subject (je sais que ca veut dire sujet en anglais lol)



Sinon pour un remplacement, puis-je lui dire de chercher dans la page le mot à chercher ou dois-je créér l'article dans une bdd, ou dois-je mettre

$texte = "Lorem Ipsum..."
str_replace=...

???


Cordialement
 
WRInaute accro
snooper a dit:
Sinon pour un remplacement, puis-je lui dire de chercher dans la page le mot à chercher ou dois-je créér l'article dans une bdd, ou dois-je mettre

c'est faisable dans les deux cas (page et contenu en base) Le truc c'est que générer du code a la volée c'est plus simple a partir d'un contenu lui même simple. Donc avoir ton contenu de page en base (sans tous le charabia HTML autour) c'est ce qui peut se présenter de plus simple a priori.

Encore faux t il que le site soit pensé dans cet esprit au démarrage sinon si tes pages sont en dure, cela veux dire que pour ajouter tes liens, il va falloir que le script frontal sur les url soit capable de trouver la page, la charger dans une variable et ensuite de cibler les mots dans le mélange joyeux et éclectique de code et de contenu. (bonjour la galère)

Perso mes site sont maintenant en base et le 'contenu' lui est stocké sous forme de texte avec une mise en forme BBCode. c'est plus light a gérer ...
 
WRInaute passionné
Ok zeb donc tu me conseillerai de mettre tout mon contenu en BDD et de me concentrer sur le graphisme et la mise en forme dans mes pages traditionnelles?
 
WRInaute accro
snooper a dit:
Ok zeb donc tu me conseillerai de mettre tout mon contenu en BDD et de me concentrer sur le graphisme et la mise en forme dans mes pages traditionnelles?

je conseil rien de particulier, j'explique seulement mon axe de dev. En fait si tes pages traditionnelles sont en dur (code php inclus dans du pur html) tu va avoir beaucoup de mal a traiter le contenu pour générer des liens dedans donc vaut mieux oublier.

si en revanche tu as un CMS (perso ou autre) qui gère le contenu réel de la page en base cela deviens un jeux d'enfant de rajouter des liens au passage quand tu formate le texte en HTML avant de l'inclure dans une template. De même pour ce type de site la mise en cache deviens intéressante car tu évite les requêtes répétées a la base pour composer ta page. (les liens dynamiques étant générés avant la mise en cache bien sur ...

pour le design du site c'est a mon sens juste une histoire de CSS donc sans rapport réel avec les liens.
 
Discussions similaires
Haut