Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Bonjour à tous!
Après avoir cherché en profondeur, je n'ai pas trouvé de mod permettant de faire ce que je cherche à faire exactement.
J'aurais aimé qu'un lien soit créé automatiquement sur un mot clé.
J'entends par la que si par exemple un membre tape le mot clé "babar", un lien soit créé automatiquement sur le mot vers une autre page du site définissant ce mot.
Le membre n'a pas ajouté de lien. Le simple fait d'avoir écrit "babar" dans son message créé un lien.
Auriez vous une idée?
Hors ligne
Bonjour
Un regex (expression régulière) dans le parser pour que le lien soit ajouté à l'affichage, un peu comme la création automatique des liens mais à partir d'une liste de terme cette fois-ci.
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Dans Parser, en ajoutant la fonction:
function lien-mot-cle($modif)
{
$modif = "babar";
$modif = preg_replace('[url=http://XXXXXX.XX/XXX.php]$modif[/url]');
}Suis je sur la bonne voie?
Hors ligne
Je lis sur d'autres forums que la mise en place de ce système va faire ramer tout le forum. Est ce vrai?
Je pense bien que c'est possible car le parser va regarder tous les mots du message et voir sur toutes les fonctions de remplacement s'il n'y a pas quelque chose à faire...
1 fonction par mot clé à modifier, si on veut le faire pour environ une centaine de mots... AIL!
Hors ligne
Le mieux est d'essayer pour voir si ça ralentis le forum.
Je ferais un peu différemment, sans besoin de répéter une fonction (à essayer en local avant, je ne suis pas sûr que ça fonctionne). A toi de modifier l'adresse et d'ajouter ce que tu veux dans le tableau en faisant attention qu'un mot ne soit pas compris dans un autre, du genre "adie" et "maladie".
parser.php
Chercher
//
// Convert a series of smilies to images
//
function do_smilies($text)
{
global $smiley_text, $smiley_img;
$text = ' '.$text.' ';
$num_smilies = count($smiley_text);
for ($i = 0; $i < $num_smilies; ++$i)
$text = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($smiley_text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />$2', $text);
return substr($text, 1, -1);
}Ajouter après
function lien-mot-cle($text)
{
$mot_clef_cherche = array("babar", "zorro");
for ($i = 0; $i < count($mot_clef_cherche); $i++)
$text = preg_replace($mot_clef_cherche[$i], '[url=http://XXXXXX.XX/'.$mot_clef_cherche[$i].'.php]'.$mot_clef_cherche[$i].'[/url]', $text);
return $text;
}Chercher
if ($pun_config['o_smilies'] == '1' && $pun_user['show_smilies'] == '1' && $hide_smilies == '0')
$text = do_smilies($text);Ajouter après
$text = lien-mot-cle($text);Il doit être possible de simplifier.
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
On est donc bien d'accord qu'il va falloir créer une fonction pour chaque mot clé.
Cela va être beaucoup trop lourd. Surtout si on a plus de 100 mots clés.
Il faudrait que chaque mot clé soit associé dès le début à une url et qu'une fonction parcours le message pour remplacer tout d'un coup non?
(La ce serait plus léger)
Hors ligne
Je sais que ma fonction n'est pas bonne, mais est ce que quelque chose dans ce genre marcherait (plutot que de créer plusieurs fonctions)?
function lien-mot-cle($text)
{
$mot_clef_cherche = array("babar", "zorro");
for ($mot_clef_cherche="babar")
$text = preg_replace('[url=http://XXXXXX.XX/babar.php]'babar'[/url]', $text);
for ($mot_clef_cherche="zorro")
$text = preg_replace('[url=http://XXXXXX.XX/zorro.php]'zorro'[/url]', $text);
return $text;
}Merci Fanf73 pour ton aide!!
Hors ligne
En utilisant tes modif Fanf, j'obtiens:
Warning: preg_replace() [function.preg-replace]: Empty regular expression in /homez.47/tribufor/en/forum/include/parser.php
Hors ligne
Si tu utilises le code que tu as postés un message au-dessus, c'est normal que ça ne marche pas, tu as modifié tout ce que j'ai fait 
Reprends ma fonction "lien-mot-clef" et ajoute tes mots-clefs dans le tableau :
$mot_clef_cherche = array("babar", "zorro");Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Je viens de réessayer avec ton code et j'ai un problème avec les "-" de la fonction qui sont mal interprétés.
Parse error: syntax error, unexpected '-', expecting '(' in /h
Je les ai remplacé par "_" et j'obtiens:
Warning: preg_replace() [function.preg-replace]: Empty regular expression in...
Dernière modification par tribuforex (23-10-2009 12:13:05)
Hors ligne
Remplace "prg_replace" par "str_replace" pour voir.
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
J'ai mis ca:
function lien_mot_cle($text)
{
$mot_clef_cherche = array("Resistances", "Supports");
for ($i = 0; $i < count($mot_clef_cherche); $i++)
$text = str_replace($mot_clef_replace[$i], '[url=http://www.XXXXXXX.com/XXXXXX.php]'.$mot_clef_replace[$i].'[/url]', $text);
return $text;
}Le forum s'affiche normalement. Plus d'erreurs. Mais les mots clés ne sont pas remplacés par des liens vers XXX
Hors ligne
Les deux mots sont écrits exactement de la même façon dans ton message, que ce soit les majuscules et le pluriel ?
Tu as bien changé les tirets "-" en "_" dans l'appel à la fonction ? (Je pense que oui sinon tu aurais une erreur)?
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Oui, les mots recherchés sont exactement identiques (majuscules et pluriels)
Oui, j'ai changé les "-" dans l'appel de la fonction.
Mais rien ne se passe.
Je peux te donner si tu veux le lien de la page sur laquelle je me base sur le forum pour voir si quelque chose est changé.
Mais la variable "$mot_clef_replace[$i]" est définie où dans la fonction? Je ne comprend pas ca?
Dernière modification par tribuforex (23-10-2009 12:37:46)
Hors ligne
Nulle part en effet, remplace par "$mot_clef_cherche[$i]"
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
Je pense à un truc pour n'avoir qu'à utiliser une seule fonction et ne pas surcharger le forum.
On peut utiliser ta fonction avec:
function lien-mot-cle($text)
{
$mot_clef_cherche = array("babar", "zorro");
for ($i = 0; $i < count($mot_clef_cherche); $i++)
$text = preg_replace($mot_clef_replace[$i], '[url=http://XXXXXX.XX/'.$mot_clef_replace[$i].'.php]'.$mot_clef_replace[$i].'[/url]', $text);
return $text;
}Et avec créer une page de transition vers la bonne page avec le code:
<?php
header('Location: http://XXXXX/XXX.php')
?>Pour l'exemple, il faudra créer 2 pages: babar.php et zorro.php qui renverront chacune vers les pages souhaitées
Ainsi, Une fonction seulement dans le parser, mais plein de nouvelles pages à créer avec simplement le header('Location:...)
Qu'en penses tu?
Hors ligne
Je comprends pas trop ce que tu dis, il n'y a déjà qu'une seule fonction
.
Et je ne vois pas trop où tu veux en venir avec la deuxième partie de ton message. La fonction te fait un lien de type "www.domaine.extension/mot_clef.php", mais tu peux faire en sorte qu'elle corresponde à ton système, quel qu'il soit, par exemple "www.domaine.extension/page.php?id=mot_clef"
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
1. Oui, il faut faire un truc du genre "page.php?id=mot_clef", comme ça, une seule page à créer...
2. Oui, str_replace est bien plus rapide que preg_replace (j'ai failli le dire hier, et puis j'ai oublié).
3. En revanche, avec preg_replace, il devrait être possible de traiter tout le tableau en une seule instruction (donc sans la boucle for) :
$text = preg_replace($mot_clef_cherche, '[url=http://XXXXXX.XX/page.php?id=$1]$1[/url]', $text);(pas testé, mais c'est un truc du genre...)
Note : ne pas oublier de changer la syntaxe du tableau $mot_clef_cherche en fonction de la fonction utilisée. Si on utilise preg_replace, il faut que ce que l'on recherche soit des expressions régulières, pas seulement des mots (donc "/babar/" au lieu de "babar").
Reste à voir ce qui est le plus performant : "str_replace + boucle" ou 'preg_replace tout seul".
Hors ligne
La fonction suivante marche donc bien:
function lien_mot_cle($text)
{
$mot_clef_cherche = array("babar", "zorro");
for ($i = 0; $i < count($mot_clef_cherche); $i++)
$text = str_replace($mot_clef_cherche[$i], '[url=http://www.xxxxx.com/'.$mot_clef_cherche[$i].'.php]'.$mot_clef_cherche[$i].'[/url]', $text);
return $text;
}Le problème est que le lien ajouté sur le mot a le nom: babar.php si babar est trouvé; zorro.php si zorro est trouvé.
C'est donc pour cela que je parlai de création de page de redirection, pour rediriger au bon endroit.
Bien sûr, le lien peut etre fixe si l'on change '.$mot_clef_cherche[$i].' mais la création de cette fonction est faite pour rediriger vers des définitions différentes généralement.
Hors ligne
De quelle forme sont les liens qui permettent d'accéder à la bonne définition de ton lexique ? Parce que tu peux le générer directement avec la fonction, il suffit de changer la forme du lien dans la balise "url".
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
@tribuforex : oui, d'où ma proposition précédente... La "page de redirection" dont tu parles est "page.php", et elle ne "redirige pas forcément", elle traite le mot_clef donné en paramètre (je ne sais pas exactement ce que tu veux faire...).
Hors ligne
Merci Mpok et fanf73 pour votre aide!
Le problème que j'ai c'est que les pages de définition n'ont pas les bons noms.
Par exemple, pour le définition "babar" ce sera "Apprendre-babar.php", puis pour "zorro" ce sera "zorro-cavalier.php"...
Et les pages amènent toujours sur "babar.php et zorro.php.
La solutions que j'ai pour l'instant est de prendre le code de Fanf73 qui créée les liens sur les mots vers "babar.php" et "zorro.php"
Puis je créé ces deux pages avec à l'intérieur:
<?php
header('Location: http://XXXXX/XX/Apprendre-babar.php')
?><?php
header('Location: http://XXXXX/XX/zorro-cavalier.php')
?>Afin de rediriger vers les bonnes pages.
Mpok tu dis:
La "page de redirection" dont tu parles est "page.php", et elle ne "redirige pas forcément", elle traite le mot_clef donné en paramètre
Ce serait bien que tous les mot clé soit linkés vers une seule et même page qui traitera le mot vers la bonne redirection. Que mets tu dans ta page?
Hors ligne
Tu peux faire comme ça si le mot et la définition diffèrent :
function lien_mot_cle($text)
{
$mot_clef_cherche = array("babar", "zorro");
$mot_clef_remplace = array("apprendre_babar", "zorro-cavalier");
for ($i = 0; $i < count($mot_clef_cherche); $i++)
$text = preg_replace($mot_clef_cherche[$i], '[url=http://XXXXXX.XX/'.$mot_clef_remplace[$i].'.php]'.$mot_clef_cherche[$i].'[/url]', $text);
return $text;
}En faisant bien attention à ce que l'ordre corresponde (c'est un peu chiant mais bon).
Pour ta seconde question, il faut faire comme pour n'importe qu'elle page dynamique : tu récupère le paramètre ($_GET['definition'] par exemple pour un lien du style page.php?definition=zorro) et tu t'en sers pour afficher ce qui correspond en piochant dans une table ou avec des conditions dans un fichier PHP (et dans ce cas-là tu peux conserver le mot simple comme référence, pas besoin d'utiliser deux tableaux).
Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.
Hors ligne
La première me semble parfaite!
Ca va être long à mettre en place si j'ai une centaine de mots et il ne faudra pas se tromper dans l'ordre en effet.
J'avais pas pensé à créer la variable "clef_replace" car je ne savais pas que l'ordre était pris en compte lors de la déclaration.
Je vais utiliser ca!
Merci Fanf73!
Hors ligne
Peut on omettre les majuscules?
si c'est "Babar" qui est dans le message et que "babar" est recherché, le lien n'est pas ajouté.
Ou bien il faut ajouter les deux mots dans "$mot_clef_cherche ?
(Avec deux liens bien dans l'ordre dans $mot_clef_remplace bien sûr)
Hors ligne