Le site des utilisateurs francophones de FluxBB.
Vous n'êtes pas identifié(e).
Bonjour,
Je souhaiterai exclure une catégorie de la recherche.
J'arrive seulement pour le moment à ne pas l'afficher sur la page recherche (dans le cadre "Indiquez où la recherche doit s'effectuer")
en modifiant cette requête :
$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE fp.read_forum IS NULL OR fp.read_forum=1 AND f.redirect_url IS NULL ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());par
// [Modif] Cacher une catégorie (avec rajout dans la requete de " AND c.id NOT IN(10) "
$result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND c.id NOT IN(10) AND f.redirect_url IS NULL ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());mais pas dans la requête de recherche a proprement dit.
La page search.php est un peu trop compliquée pour moi
.
Si une âme charitable peut m'aiguiller.
Dernière modification par Spiky (10-10-2012 18:58:25)
I don't play against a team in particular. I play to fight against the idea to lose... Life is beautiful.
Quelque #ID et beaucoup de .CLASS
Hors ligne
Salut,
Pas testé mais je dirais que d'abord, il faut chercher tous les LEFT JOIN '.$db->prefix.'forum_perms dans le fichier search. Si on teste les permissions, c'est que c'est une requête qui va donner le résultat d'une recherche...
Juste avant les termes recherchés, insérer INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id
Juste après les SELECT, ajouter f.cat_id, modif inutile et qui buggue le résultat, voir message #6
Et après les WHERE, ajouter f.cat_id NOT IN (MON_ID)
C'est à toi de voir si tous sont à modifier selon tes besoins (est-ce que faire un "voir tous les topics/messages d'un utilisateur" ou "voir messages récents" doit aussi ne pas afficher cette catégorie ?)
Evidemment, toutes les requêtes sauf celle que tu as déjà modifiée.
Dernière modification par PascL (12-10-2012 20:46:03)
Bouh !
StarShip Renaissance
Hors ligne
Merci PascL,
J'ai suivi tes conseils et c'est presque tout bon. :canon:
Je souhaite que cela s'applique à tous les liens faisant appels à la recherche (dans le header "Contributions : Personnelles | Nouvelles | Récentes | Sans réponse" ainsi que dans le profil "Messages : 8 764 - Afficher toutes les discussions - Voir les messages de cet utilisateur - Afficher toutes les discussions suivies".
Dans le header, il y a encore 2 liens qui ne fonctionnent pas avec cette requête dans les contributions : Personnelles (action=show_replies) et Sans réponse (action=show_unanswered), les deux autres fonctionnent à merveille.
Dans le profil, aucun liens ne fonctionnent correctement.
Alors soit je m'y prend mal ou il y a encore quelques chose à modifier.
voici comment j'ai mis les compléments que tu me suggères dans la requête pour "Sans réponse" :
$result = $db->query('SELECT f.cat_id, t.id FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.cat_id NOT IN (10) AND t.num_replies=0 AND t.moved_to IS NULL ORDER BY t.last_post DESC') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());P.S: J'ai modifié toutes les requêtes "LEFT JOIN '.$db->prefix.'forum_perms"
Pour les recherches "basiques" tout à l'air de bien fonctionner sur la page search.
Merci pour ton aide.
Dernière modification par Spiky (12-10-2012 16:35:14)
I don't play against a team in particular. I play to fight against the idea to lose... Life is beautiful.
Quelque #ID et beaucoup de .CLASS
Hors ligne
Quand tu dis que ça ne fonctionne pas correctement (j'ai toujours pas pu tester), ya-t-il un changement du nombre de résultats avec et sans la modif ? Pour essayer si ça exclut bien les catégories, tu peux essayer d'exclure ttes les catégories (avec cat_id=0 dans le where par exemple). Si aucune réponse, c'est que la requête est censé fonctionner comme tu souhaites.
Et un truc bête (on sait jamais) : le premier message tu as mis l'id 10, dans le second l'id est 2. C'est bien le bon id que tu testes ? 
Bouh !
StarShip Renaissance
Hors ligne
Un exemple,
Je clique sur le lien Sans réponse (dans header Contributions), cela me retourne une réponse avec une discussion qui a une réponse !!! et des liens de page vide. Alors qu'il y plein de discussion sans réponse. Je supprime la modif de la requête pour action=show_unanswered et la j'ai bien toute les discussions sans réponse mais avec la catégorie non souhaitée.
Et un truc bête (on sait jamais) : le premier message tu as mis l'id 10, dans le second l'id est 2. C'est bien le bon id que tu testes ?
Oui, j'ai testé avec l'id 2 pour autre chose et je n'ai pas mis ici dans le message le bon id. Mais toutes les requêtes du test on bien le meme id 
P.S: j'ai modifié mon message du dessus pour ne plus avoir d'ambiguïté.
Dernière modification par Spiky (12-10-2012 16:35:27)
I don't play against a team in particular. I play to fight against the idea to lose... Life is beautiful.
Quelque #ID et beaucoup de .CLASS
Hors ligne
Cette fois j'ai testé et trouvé le bug.
C'est un truc que je t'ai fait rajouter qui est inutile et fait planter le résultat des requêtes.
C'est le f.cat_id, dans le SELECT qui pose problème. Le résultat étant pris par un fetch_row, l'ordre des champs dans le select est important, donc soit tu supprimes cet ajout (parce que normalement la valeur n'est pas utilisée), soit il est à mettre après les autres champs.
Avec la requête du #3, le résultat devait te donner le bon nombre de pages, mais un nombre de résultats seulement égal au nombre de catégories de ton forum (ou au nombre-1 puisqu'un est exclu).
Je vais modifier mon message #2 
Bouh !
StarShip Renaissance
Hors ligne
Grand Merci PascL d'avoir pris du temps pour résoudre ma requête.
Tout est ok apparemment [j'ai pas encore essayé (c'est en cours) toutes les possibilités de recherche (header - profil - recherche a proprement dit) une fois fait je passerai le sujet en résolu]
Édit : test effectué avec succès, je passe en résolu.
Dernière modification par Spiky (12-10-2012 22:38:24)
I don't play against a team in particular. I play to fight against the idea to lose... Life is beautiful.
Quelque #ID et beaucoup de .CLASS
Hors ligne
Le résultat étant pris par un fetch_row, l'ordre des champs dans le select est important.
Nice catch…
Hors ligne