[RESOLU] Gestion de tags via l'url (GET)

Eléphant du PHP | 190 Messages

31 juil. 2012, 14:10

Bonjour,

J'ai un petit problème qui me bloque, j'affiche une liste de tags, chaque fois je clique sur un tag il est ajouté aux autres via l'url en GET et je construit ma requête SQL en récupérant cette valeur.

Tout fonctionne bien.

La ou je coince c'est lorsque je clique sur un tag déjà présent dans la requête GET, je voudrais qu'il en soit supprimé.

J'ai ajouté les 3 premières variables pour l’exemple. Elles sont générées dynamiquement ailleurs dans le script.
// exemple si on arrive sur la page avec cette requête ?tags=tag+tag-3+tag-4
$tags=array('tag','tag-1','tag-2','tag-3','tag-4'); // liste complète des tags issus de la BDD
$tagRequest=array('tag','tag-3','tag-4'); // tags envoyés par methode GET mis en array
$queryString='tag+tag-3+tag-4'; // la requête en elle même $_GET['tags']
foreach($tags as $tag){
	$secondClass='';
	if(in_array($tag,$tagRequest)){ // si le tag est dans la requête
		$secondClass='  tagChecked'; // variable pour CSS
		$string=$queryString; // c'est ici que je ne sais pas quoi faire, il faudrait supprimer le tag de la requête
	}else{ // le tag n'est pas dans la requete
		if(empty($queryString)){
			$string=$tag;
		}else{
			$string=$queryString.'+'.$tag;
		}
	}
	echo'<a class="tag'.$secondClass.' "href="index.php?tags='.$string.'">'.$tag.'</a>';
}
J'ai essayé avec preg_replace pour supprimer le tag mais le soucis c'est que si un tag en contient un autre, toutes les occurrences seront supprimées.
J'ai pensé à dupliquer mon tableau tagRequest et supprimer le tag du tableau lorsqu'il est déjà présent mais problème lors de la boucle suivante... Le tag étant supprimé, tout est faussé

Bref, je n'arrive pas à résoudre ce problème.

Une piste ?

Merci.

Mammouth du PHP | 1967 Messages

31 juil. 2012, 15:24

Je n'ai pas lu ton script, mais moi j'ajouterais le nouveau tag à mon array, puis detecter les doublons éventuelle pour suppression (avec une fonction comme array_count) et préparation de requète avec l'array de tag. (éventuellement vérification d'autorisation des tags avant préparation de requète)
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 190 Messages

31 juil. 2012, 17:31

Merci pour ta réponse.

Pas bête mais j'ai finalement trouvé une autre solution. En fait mon idée de base était bonne (avec la duplication de mon array). Il suffisait juste de le réinitialiser à chaque boucle.
foreach($tags as $tag => $cat){
	$htmlCat='';
	if($tempCat != $cat){
		$htmlCat='<p class="categorie '; 
		if($tempCat != '') $htmlCat.='catop'; 
		$htmlCat.='">'.$cat.'</p>';
		$tempCat=$cat;
	}
	$secondClass='';
	$key=array_search($tag,$tagRequest);
	if($key!==false){
		$secondClass=' tagChecked';
		$tempArray=$tagRequest;
		unset($tempArray[$key]);
		if(empty($tempArray)){
			$string='';
		}else{
			$string='?tags=';
			$i=0;
			foreach($tempArray as $temp){
				$i++;
				if($i<count($tempArray)){
					$string.=$temp.'+';
				}else{
					$string.=$temp;
				}
			}
		}
	}else{
	        if(empty($queryString)){
			$string='?tags='.$tag;
		}else{
			$string='?tags='.$queryString.'+'.$tag;
		}
	}
	echo $htmlCat;
	echo'<a class="tag'.$secondClass.'" href="index.php'.$string.'">'.$tag.'</a>';
}