Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
Le principe de remplacement est le bon mais pas le début : pourquoi copier le contenu du message dans la variable qui contient le mot clé ?
Soit tu mets ton code (str_ireplace(...)) dans la fonction parse_message à la place du message, soit tu modifies le contenu de la variable $cur_topic['message'] pour l'affiche ensuite.
$cur_post['message'] = parse_message(str_ireplace($pattern, $remplacement, $cur_post['message']), $cur_post['hide_smilies']);ou
$cur_post['message'] = str_ireplace($pattern, $remplacement, $cur_post['message']);
$cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smilies']);En y pensant, le mieux serait d'utiliser les balises de bbcode pour la mise en gras vu qu'elles seront parsé, tu peux même choisir une couleur avec les balises couleurs du bbcode 
Je sais qu'il faut que je m'y mette plus en profondeur sur le php et mysql, mais le temps me manque et c'est vraiment pas facile.
Il vaut mieux éviter de se lancer dans un projet avec une deadline proche quand on ne connaît pas suffisamment bien son sujet 
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
ARG!! Je deviens fou ca y est! LOL!
Ce sont bien la des variables que tu fixe avant? J'ai mis ca pour tester:
$search_word = "mickey";
$pattern = $search_word;
$remplacement = "babar";
$cur_topic['message'] = parse_message(str_ireplace($pattern, $remplacement, $cur_topic['message']), $cur_post['hide_smilies']);(après vient $result = $db->query, puis le echos avec cur_topic (pas cur_post))
Moi pas comprendre..
Il vaut mieux éviter de se lancer dans un projet avec une deadline proche quand on ne connaît pas suffisamment bien son sujet wink
Je sais... (j'ai pas de réponse à apporter...) I'm GUILTY!
Merci pour ton aide Fanf73!
Hors ligne
Je mettais des variables comme j'aurais pu mettre un simple libellé, mais tu peux utiliser directement les tiennes :
str_ireplace($search_word, "[b]".$search_word."[/b]", $cur_topic['message'])Tu peux remplacer
$cur_post['hide_smilies']par 0 (ou 1, fait des tests et en fonction de ce que tu veux), histoire de fixer le fonctionnement pour tous les messages.
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 fonction str_ireplace ne semble pas être reconnu.
J'ai essayé la preg_replace mais j'obtiens un message d'erreur.
J'ai surement due mal positionner la fonction (je l'ai mise directement dans le echo:
echo '<a href="forum/viewtopic.php?pid='.parse_message(preg_replace($search_word, "[b]".$search_word."[/b]", $cur_topic['message'], 0)).'#p'.$cur_topic['message_id'].'">Lien vers la discussion</a>';Message d'erreur:
Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in /homez.47/tribufor/www/test.php on line 167
Warning: Missing argument 2 for parse_message() in /homez.47/tribufor/www/forum/include/parser.php on line 472Le problème de ce message d'erreur c'est que je ne sais pas ce qu'il appelle "delimiter" et je ne sais pas où il veut ses "backslash".
Dernière modification par tribuforex (08-09-2009 14:53:35)
Hors ligne
Il faudrait vraiment que tu te plonges un peu mieux dans le sujet...
Pourquoi as-tu décidé de placer ce bout de code à la place de message_id ? C'est la variable $cur_topic['message'] dans le echo que tu aurais du remplacer ! Il suffit de réfléchir un minimum pour s'en rendre compte.
Et utilise plutôt "str_replace".
D'ailleurs, je ne vois pas du tout d'où tu sors ce $cur_topic['message_id'], il n'est pas présent dans ta requête de sélection. Pourrais tu reposter le code complet qu'on puisse être sûr de ce sur quoi on travaille.
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
Désolé, j'ai due reprendre une vieille version pour expliquer le problème sur le forum car j'ai ajouté plein de blabla (des strong, des br et autres..).
Je suis parvenu à mettre en gras c'est bon.
J'ai remplacé
.parse_message($cur_topic['message'], 0).Par
.parse_message(str_replace($search_word, "".$search_word."", $cur_topic['message']), 0).
Voici le code avant le str_replace:
echo '<a href="forum/viewtopic.php?pid='.$cur_topic['id'].'" title="'.'#p'.$cur_topic['id'].'">'.$cur_topic['subject'].'</a>'.parse_message($cur_topic['message'], 0).'<a href="forum/viewtopic.php?pid='.$cur_topic['id'].'>Voir les réponses apportées à cette discussion</strong></a>';Voici le code après le str_replace:
echo '<a href="forum/viewtopic.php?pid='.$cur_topic['id'].'" title="'.'#p'.$cur_topic['id'].'">'.$cur_topic['subject'].'</a>'.parse_message(str_replace($search_word, "[b]".$search_word."[/b]", $cur_topic['message']), 0).'<a href="forum/viewtopic.php?pid='.$cur_topic['id'].'>Voir les réponses apportées à cette discussion</strong></a>';L'erreur provenait du fait que je mettais str_ireplace, basé sur ta réponse de 13h56.
Mais c'est bon, ke problème est résolu!
MERCI FANF73!
(Désolé d'avoir été un mauvais élève..
)
Hors ligne
J'apporte le code complet qui fonctionne pour ceux qui seraient intéressés:
<?php
define('PUN_ROOT', './forum/');
require PUN_ROOT.'include/common.php';
require PUN_ROOT.'include/parser.php';
$number_result_to_show = 3;
$search_word = "BABAR";
$result = $db->query('SELECT p.id, p.poster_id, p.message, p.posted, p.topic_id, t.subject, u.username FROM '.$db->prefix.'posts AS p
INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id
INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id
LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3)
INNER JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id
WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL AND p.message LIKE \'%'.$search_word.'%\'
ORDER BY t.id DESC, p.posted DESC LIMIT 0,'.$number_result_to_show) or error('Impossible d\'effectuer la recherche', __FILE__, __LINE__, $db->error());
while($cur_topic = $db->fetch_assoc($result))
{
echo '<a href="forum/viewtopic.php?pid='.$cur_topic['id'].'" title="'.'#p'.$cur_topic['id'].'">'.$cur_topic['subject'].'</a>'.parse_message(str_replace($search_word, "[b]".$search_word."[/b]", $cur_topic['message']), 0).'<a href="forum/viewtopic.php?pid='.$cur_topic['id'].'>Voir les réponses apportées à cette discussion</strong></a>';
}
?>$number_result_to_show est le nombre de message à faire afficher
$search_word est le mot recherché sur votre forum
Merci encore FANF73!
Dernière modification par tribuforex (08-09-2009 15:52:28)
Hors ligne
Génial, bravo !
N'oublies pas de rajouter l'ancre à la fin de l'url qui va vers les nouveaux messages :
'<a href="forum/viewtopic.php?pid='.$cur_topic['id'].'#p='.$cur_topic['id'].'">Voir les réponses apportées à cette discussion</strong></a>'Je viens de te corriger en même temps une erreur d'html (tu avais oublié de fermer le " )
Dernière modification par Super_baloo8 (08-09-2009 21:05:26)
[img]http://www.grid-france.fr/images/equipe/userbar_equipe_france_2.gif[/img] Équipe France
Hors ligne
D'ailleurs, je ne vois pas du tout d'où tu sors ce $cur_topic['message_id'], il n'est pas présent dans ta requête de sélection.
Au départ, je lui avais marqué dans la requête machin AS message_id car au départ, j'utilisais trop d'id en même temps.
Mais j'ai supprimé, et tout remodifier dans les messages suivant, mais je ne penses pas qu'il a du y faire attention, c'est normal, il débute 
[img]http://www.grid-france.fr/images/equipe/userbar_equipe_france_2.gif[/img] Équipe France
Hors ligne
L'ancre ne sert à rien avec l'id du topic, seulement avec l'id du message. Il faut à la rigueur ajouter "&action=new" pour aller au premier nouveau message (mais ça n'est intéressant que si le visiteur est connecté).
P.S. : Merci d'éviter de faire des doubles-posts, vous pouvez modifier vos messages si vous avez oublié de dire quelque chose (surtout là, à peine 2 minutes entre les deux).
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
Au niveau de ta boucle Tribuforex, remplace là par :
while($cur_topic = $db->fetch_assoc($result))
{
echo '<a href="forum/viewtopic.php?pid='.$cur_topic['id'].'#p'.$cur_topic['id'].'" title="Voir le message de la discussion : '.$cur_topic['subject'].'">'.$cur_topic['subject'].'</a>'.parse_message(str_replace($search_word, "[b]".$search_word."[/b]", $cur_topic['message']), 0).'<a href="forum/viewtopic.php?id='.$cur_topic['topic_id'].'>Aller à la discussion</strong></a>';
}Le premier lien généré sera celui vers le message exacte de la discussion comportant le mot clé.
Le deuxième lien généré est celui vers la discussion (qui se place sur le premier message de la discussion).
@Fanf73, pas de soucis pour éviter les messages multiple, c'était juste pour que l'on distingue mieux ma réponse pour Tribu, et pour toi. Mais dorénavant, je ferais tout dans le même message.
Rajouter l'ancre avec l'id du message dans le lien viewtopic.php permet d'aller à l'ancre du message trouvé par la recherche.
Pour l'instant, dans son code, il n'indiquait jamais l'id du topic, mais l'id du message. Dans mon code ci-dessus, il y a l'id du message dans le premier lien, et l'id du topic dans le deuxième lien. Donc, si ca sert à quelque chose 
Dernière modification par Super_baloo8 (08-09-2009 22:35:42)
[img]http://www.grid-france.fr/images/equipe/userbar_equipe_france_2.gif[/img] Équipe France
Hors ligne
Ok, j'avais confondu les variables. Pour moi "cur_topic[id]" contenait l'id du topic et non celle du message, question d'habitude avec le code de fluxbb.
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
Salut Baloo,
Merci pour ce petit plus qui améliore bien le suivi du lien. :canon:
Pourrais tu me réexpliquer comme fonctione $recherche_integrale?
Tu as dit:
tu as possibilité, sois de faire une recherche avec la phrase entière, ou soit par mot clefs (variable $recherche_integrale à mettre à TRUE si tu veux une recherche par mot clefs)
Actuellement, après de multiples tests, je ne parviens qu'à faire afficher les résultats que sur un seul et même mot clé.
Si j'attribue plusieurs mots clés, il faut alors que dans le message les mots clés apparaissent exactement pareil à la suite pour qu'il affiche qqchose.
Comment lancer une recherche sur plusieurs mots clés?
Hors ligne
Désolé de ne répondre que maintenant 
Pour faire une recherche sur plusieurs mots clés, en SQL, les jokers sont % (sous windows, le joker c'est *)
Donc pour permettre une recherche avec plusieurs mots clés, il faut dans ton formulaire de recherche, indiqué si c'est une recherche sur la phrase entière, ou si ce sont tous des mots clef (le meilleur choix par défaut, à mon avis, et chaque mot est un mot cléf).
Donc sur ton formulaire, soit tu met un select, ou une checkbox, et en php tu récupère cette valeur.
Ensuite, tu récupère la valeur de l'élément du formulaire dédié à la fonction pour savoir le type de recherche à faire.
Suivi l'état de cet éléments, tu changera le mot clé, soit tu le laisse tel quel, avec les deux joker (un au début, un à la fin), soit tu change touts les espace par des joker (en n'oubliant pas de laisser les joker de début et fin de mot cléf)
Disons que tu récupère la valeur depuis un select qui à comme attribut name "type_recherche".
<?php
$search_word = 'ma recherche'; // Variable avec contenu de ma recherche
if(isset($_POST['type_recherche'])) // Si la variable du formulaire existe
{
switch($_POST['type_recherche']) // Tu connais Qui veut gagner des Millions ? C'est pareil, sauf que l'on va switcher suivant le contenu de la variable du formulaire 'type_recherche'
{
case 'integrale': // Si recherche intégrale
default: // Si la valeur de la variable du formulaire n'existe pas dans mon switch, c'est ce switch qui sera utilisé par défaut
$recherche_sql = str_replace(' ', '%', $search_word); // Je remplace tous les espace par des jokers
break; // J'ai trouvé mon résultat, j'arrête ma boucle
case 'phrase': // Si recherche phrase
$recherche_sql = $search_word; // Je remplace tous les espace par des jokers
break; // J'ai trouvé mon résultat, j'arrête ma boucle
}
}
else // Si la variable du formulaire n'existe pas
{
$recherche_sql = str_replace(' ', '%', $search_word); // Je remplace tous les espace par des jokers
}
$recherche_sql = '%'.$recherche_sql.'%'; // Je n'oublie pas que je dois avoir des joker en début et fin de ma recherche
?>Le même code écris en français (enfin, j'ai essayé
)
Traduction litterale :
Mots recherchés : ma recherche
<-> Si ma variable 'type_recherche' existe
-> je teste sa valeur pour connaitre l'action à faire
-> si la valeur est 'integrale' (ou que la valeur n'existe dans aucunes des conditions du switch) alors
-> je remplace tous les espace blancs par des jokers
-> J'arrête de tester les valeurs
-> si la valeur est 'phrase' alors
-> je recopie simplement les mots recherchés dans ma variable
-> J'arrête de tester les valeurs
<-> Sinon
-> je remplace tous les espace blancs par des jokers
Je rajoute les jokers avant mes mots recherchés, et après.[img]http://www.grid-france.fr/images/equipe/userbar_equipe_france_2.gif[/img] Équipe France
Hors ligne
Merci Super_Baloo8, Ca marche nikel!
Je pensai aussi mettre la description de la page créée en automatique (sur le dernier message absorbé par le code que tu m'as donné)
J'ai pensé à utiliser le <pun_meta> mais ca ne marche pas comme pour les pages propres au forum.
Pour mon forum, j'avais utilisé la solution suivante:
http://www.punbb.fr/forums/viewtopic.php?id=3608&p=1
Mais pour une page extérieure au forum, je n'y parviens pas.
Quelqu'un aurait il une idée svp?
Hors ligne