FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Vous n'êtes pas identifié(e).

#1 18-02-2013 19:57:43

Spiky
Membre
Inscription : 10-04-2008
Messages : 829

Besoin d'aide pour regroupement de fonction

Bonsoir,
Suite à cette demande ICI, j'ai continué de modifier mes fichiers (edit,post ect...), il m'en reste un qui est search.php sur lequel je n'arrive pas à faire ce que je souhaite.

Ce que j'ai actuellement :

	// [Modif] Mod Tag added
	else if ($action == 'show_tag')
	{
		$topic_tag_id = intval($_GET['t_tag_id']);
		if ($topic_tag_id < 1)
			message($lang_common['Bad request']);
	}
	// [Modif] Fin Mod Tag
	// [Modif] Mod Tag 2 added
	else if ($action == 'show_tag2')
	{
		$topic_tag2_id = intval($_GET['t_tag2_id']);
		if ($topic_tag2_id < 1)
			message($lang_common['Bad request']);
	}
	// [Modif] Fin Mod Tag 2
		else if ($action == 'show_new' || $action == 'show_recent' || $action == 'show_replies' || $action == 'show_user_posts' || $action == 'show_user_topics' || $action == 'show_subscriptions' || $action == 'show_unanswered' || $action == 'show_tag' || $action == 'show_tag2') // [Modif] Mod Tag added AND Mod Tag 2 added
			// [Modif] Mod Tag added
			else if ($action == 'show_tag')
			{
				$result = $db->query('SELECT t.id FROM '.$db->prefix.'topics AS t 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='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.tag_id='.$topic_tag_id.' GROUP BY t.id') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());
				$num_hits = $db->num_rows($result);

				if (!$num_hits)
					message($lang_search_blog['No user posts']);
			}
			// [Modif] Fin Mod Tag
			// [Modif] Mod Tag 2 added
			else if ($action == 'show_tag2')
			{
				$result = $db->query('SELECT t.id FROM '.$db->prefix.'topics AS t 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='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.tag2_id='.$topic_tag2_id.' GROUP BY t.id') or error('Unable to fetch topic list2', __FILE__, __LINE__, $db->error());
				$num_hits = $db->num_rows($result);

				if (!$num_hits)
					message($lang_search_blog['No user posts']);
			}
			// [Modif] Fin Mod Tag 2
			else if ($search_type[1] == 'show_tag') // Mod Tag added
				$crumbs_text['search_type'] = sprintf($lang_search_blog['By tag show as topics'], pun_htmlspecialchars($search_set[0]['tag_name']));
				
			else if ($search_type[1] == 'show_tag2') // Mod Tag 2 added
				$crumbs_text['search_type'] = sprintf($lang_search_blog['By tag show as topics'], pun_htmlspecialchars($search_set[0]['tag2_name']));

Avec ceci, quand je sélectionne mon premier tag ou mon deuxième tag, j'ai bien le résultat des posts pour chaques tags mais séparés.
Ce que je souhaiterai, c'est avoir le résultat des deux réunis, c'est à dire les tags avec le même id/name pour la recherche tag1 et tag2.

Quelqu'un pourrait il m'aiguiller ?

P.S: ma table Tag contient deux colonnes : "id" et "tag_name"
rajout dans la table topics de deux colonnes : "tag_id" et "tag2_id"


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

#2 21-02-2013 23:08:55

Spiky
Membre
Inscription : 10-04-2008
Messages : 829

Re : Besoin d'aide pour regroupement de fonction

Personnes pour m'orienter !
Il faudrait que j'arrive à regrouper les deux actions show_tag.


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

#3 22-02-2013 11:33:46

PascL
Membre
Inscription : 06-09-2007
Messages : 554
Site Web

Re : Besoin d'aide pour regroupement de fonction

J'ai pas totalement compris en fait.

Tu veux ceci:
$result = $db->query('... WHERE ... AND (t.tag_id='.$topic_tag_id.' OR t.tag2_id='.$topic_tag_id.') ...') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());

Ou cela:
$result = $db->query('... WHERE ... AND t.tag_id='.$topic_tag_id.' AND t.tag2_id='.$topic_tag2_id.' ...') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());

Hors ligne

#4 22-02-2013 19:50:59

Spiky
Membre
Inscription : 10-04-2008
Messages : 829

Re : Besoin d'aide pour regroupement de fonction

Bonjour PascL,
Je vais essayer d'être le plus clair possible.

Actuellement, avec ma modification pour la recherche j'ai :

un lien pour la recherche "topic_tag_id" qui est généré par " $action == 'show_tag' " qui me donne " ./search.php?action=show_tag&t_tag_id=1 " et un pour "topic_tag2_id" généré par " $action == 'show_tag2' " qui donne " ./search.php?action=show_tag2&t_tag2_id=1 ".
Ces deux liens ou actions de recherche ce font que sur chaque colonne. Ce qui fait que quand je clique sur le tag 1 j'ai les résultats que d'une colonne (logique), j'ai le résultat de la colonne tag_id ou celle de tag2_id.

Je voudrai que la recherche s'effectue sur les deux colonnes et que si un id est identique sur les deux colonnes qu'il me retourne les topics des deux. (en gros que " ./search.php?action=show_tag&t_tag2_idANDshow_tag2&t_tag2_id=1 ").

Finalité, regrouper la recherche.

Je pense qu'il faudrait qu'une action show_tag, et qu'il faudrait regrouper le premier code (ci dessous)

	// [Modif] Mod Tag added
	else if ($action == 'show_tag')
	{
		$topic_tag_id = intval($_GET['t_tag_id']);
		if ($topic_tag_id < 1)
			message($lang_common['Bad request']);
	}
	// [Modif] Fin Mod Tag
	// [Modif] Mod Tag 2 added
	else if ($action == 'show_tag2')
	{
		$topic_tag2_id = intval($_GET['t_tag2_id']);
		if ($topic_tag2_id < 1)
			message($lang_common['Bad request']);
	}
	// [Modif] Fin Mod Tag 2

et puis après ajouter comme tu as mis le and ou or dans la close.

Dernière modification par Spiky (22-02-2013 20:03:02)


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

#5 22-02-2013 22:58:00

PascL
Membre
Inscription : 06-09-2007
Messages : 554
Site Web

Re : Besoin d'aide pour regroupement de fonction

Voilà, ceci devrait faire l'affaire smile
Ces 2 blocs de code remplacent tes 2 blocs avec les couples de else if du message #1

	else if ($action == 'show_tags')
	{
// liens possibles
// ./search.php?action=show_tags&tags=39			=> [A]: tag1=39 AND tag2=39
// ./search.php?action=show_tags&tags=39&opt=1			=> [b]: tag1=39 OR tag2=39
// ./search.php?action=show_tags&tag1=12&tag2=23		=> [C]: tag1=12 AND tag2=23
// ./search.php?action=show_tags&tag1=12&tag2=23&opt=1		=> [D]: tag1=12 OR tag2=23
// ./search.php?action=show_tags&tag1=12			=> [E]: tag1=12
// ./search.php?action=show_tags&tag2=23			=> [F]: tag2=23
		$tag1 = (isset($_GET['tag1']) ? intval($_GET['tag1']); : 0);
		$tag2 = (isset($_GET['tag2']) ? intval($_GET['tag2']); : 0);
		$tag3 = (isset($_GET['tags']) ? intval($_GET['tags']); : 0);
		$bool_trueForAnd_falseForOr = true;
		if(isset($_GET['opt']))
		{
			$bool_trueForAnd_falseForOr = ((intval($_GET['opt']) > 0) ? false : true);
		}
		if (($tag1 < 1) && ($tag2 < 1) && ($tag3 < 1))
			message($lang_common['Bad request']);
	}
	else if ($action == 'show_tags')
	{
		$where_req = '';
		if($tag3 > 0)
		{
			if($bool_trueForAnd_falseForOr == true)
			{
				// [A]
				$where_req .= ' AND t.tag_id='.$tag3.' AND t.tag2_id='.$tag3;
			}
			else
			{
				// [b]
				$where_req .= ' AND (t.tag_id='.$tag3.' OR t.tag2_id='.$tag3.')';
			}
		}
		else
		{
			if($tag1 > 0)
			{
				if($tag2 > 0)
				{
					if($bool_trueForAnd_falseForOr == true)
					{
						// [C]
						$where_req .= ' AND t.tag_id='.$tag1.' AND t.tag2_id='.$tag2;
					}
					else
					{
						// [D]
						$where_req .= ' AND (t.tag_id='.$tag1.' OR t.tag2_id='.$tag2.')';
					}
				}
				else
				{
					// [E]
					$where_req .= ' AND t.tag_id='.$tag1;
				}
			}
			else if($tag2 > 0)
			{
				// [F]
				$where_req .= ' AND t.tag2_id='.$tag2;
			}
		}
		$result = $db->query('SELECT t.id FROM '.$db->prefix.'topics AS t 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='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) '.$where_req.' GROUP BY t.id') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());
		$num_hits = $db->num_rows($result);

		if (!$num_hits)
			message($lang_search_blog['No user posts']);
	}

Hors ligne

#6 23-02-2013 00:49:43

Spiky
Membre
Inscription : 10-04-2008
Messages : 829

Re : Besoin d'aide pour regroupement de fonction

Merci PascL,
J'ai testé ta modification qui fonctionne mais pas tout à fait.
Alors dans un premier temps, j'ai dû supprimer les ; dans le premier bloc pour ne pas avoir d'erreur :

		$tag1 = (isset($_GET['tag1']) ? intval($_GET['tag1']) : 0);
		$tag2 = (isset($_GET['tag2']) ? intval($_GET['tag2']) : 0);
		$tag3 = (isset($_GET['tags']) ? intval($_GET['tags']) : 0);

Une fois enlevé c'est OK mais pas pour tous les types de lien :

[A] --> ne fonctionne pas
[b] --> Ok
[C] --> ne fonctionne pas
[D] --> Ok
[E] --> Ok
[F] --> Ok

Dernière modification par Spiky (23-02-2013 00:51: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

#7 23-02-2013 13:20:33

PascL
Membre
Inscription : 06-09-2007
Messages : 554
Site Web

Re : Besoin d'aide pour regroupement de fonction

Les ";" dans les if réduits, je me fais avoir à chaque fois... happy

Pour les cas A et C, ya pas d'erreur qui me saute aux yeux... Ajoute des echo '1'; echo '2'; ... echo 'N'; dans les if pour voir si tu suis bien les instructions comme attendues

Hors ligne

#8 23-02-2013 16:01:15

Spiky
Membre
Inscription : 10-04-2008
Messages : 829

Re : Besoin d'aide pour regroupement de fonction

Mea culpa, PascL.

Tous les liens fonctionnent, j'avais tout simplement pas de cas dans un sujet ou les deux tags étaient identiques. (chose qui ne devrait jamais arriver normalement)

Un GRAND MERCI pour ton aide.

Il me reste juste une petite chose à régler dans ce fichier, le cas du dernier bloc du premier message (l'affichage dans le fil d’Ariane).


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

Pied de page des forums