Bonjour à tous
Tout d'abord, je ne cache que ce message est du cross posting... il est déjà ici http://www.wordpress-fr.net/support/edit.php?id=243916 , mais le problème étant un peu délicat, je pense qu'il peut être nécessaire d'avoir des cerveaux différents
Je cherche à pouvoir sélectionner des articles appartenant à PLUSIEURS catégories (j'utilise donc la fonction category__and, très pratique). Pour cela, il suffit de cocher des cases, voir la page suivante : http://raudin.u-bordeaux3.fr/index-.php?cat=55
A droite, des cases à cocher selon diverses catégories ; à gauche, je fais afficher une partie de ce qui est renvoyé par le PHP de la fonctionnalité Ajax, à savoir les catégories cochées (55 est tjs vrai, c'est normal).
Mon problème est le suivant :
Lorsque je clique sur les différentes cases, ça ne fonctionne pas ! Je n'obtiens pas les articles de telles et telles catégories, mais TOUS les articles de la catégorie 55. Il y a bien des articles appartenant à plusieurs catégories, aucun souci là-dessus. Un bon test consiste à tout cocher : il n'y a aucun article qui devrait apparaître (aucun ne peut être dans toutes les catégories), et ils apparaissent tous...
Voici le code présent dans le fichier appelé par le Javascript :
Le code Javascript :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 <?php require('./wp-config.php'); $wp->init(); $wp->parse_request(); $wp->query_posts(); $wp->register_globals(); if(isset($_POST["valeurs_recherches"])) { $var = '55,'.$_POST["valeurs_recherches"]; echo $var; query_posts(array('category__and' => array($var))); if ( have_posts('') ) while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <h1 class="entry-title"><?php the_title(); ?></h1> <div class="entry-content"> <?php the_content(); ?> <?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Pages:', 'twentyten' ), 'after' => '</div>' ) ); ?> <?php edit_post_link( __( 'Edit', 'twentyten' ), '<span class="edit-link">', '</span>' ); ?> </div><!-- .entry-content --> </div><!-- #post-## --> <?php endwhile; } ?>
Le fichier PHP est bien appelé (la preuve avec le echo qui renvoie bien les cases cochées), mais la fonction category__and ne semble pas bien fonctionner... ! J'ai vérifié en test sur cette page, la fonction category__and fonctionne...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 <script type="text/javascript"> function getXhr() { var xhr = null; if(window.XMLHttpRequest) { // Firefox et autres xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) { // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { // XMLHttpRequest non supporte par le navigateur alert("Conflit : navigateur ne supporte pas les objets XMLHTTPRequest"); xhr = false; } return xhr; } // Fonction a faire au clic sur les cases a cocher function rechAv() { var xhr = getXhr(); // On definit ce qu'on va faire quand on aura la reponse xhr.onreadystatechange = function() { // On ne fait quelque chose que si on a tout recu et que le serveur est ok if(xhr.readyState == 4 && xhr.status == 200) { leselect = xhr.responseText; // On se sert de innerHTML pour identifier les elements envoyes document.getElementById('resultatrechercheajax').innerHTML = leselect; } } // POST (envoi des donnees) xhr.open("POST","ajax-categorie.php",true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); // Recuperation valeur checkbox var criteres_recherche = new Array(); var formulaire = document.formulaire; var nb = formulaire.elements['tri_recherche[]'].length; for (i = 0; i < nb; i ++) { if (formulaire.elements['tri_recherche[]'][i].checked) { sel = formulaire.elements['tri_recherche[]'][i].value; criteres_recherche.push(sel); //alert(sel); } } //Regroupe les resultats separes par des virgules criteres_recherche = criteres_recherche.join(","); //dpt = sel.options[sel.selectedIndex].value; dpt = criteres_recherche; xhr.send("valeurs_recherches="+dpt); } </script>
D'autre part, question subsidiaire : existe-t-il une URL pour les catégories avec des ET (à l'instar des "OU" qui s'écrirait index.php?cat=1,2,3) ?
Merci beaucoup si vous avez tout lu !!
Merci par avance pour vos réponses
PS : la partie HTML concernée au cas où :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 <div id="resultatrechercheajax"> <?php // ==================== Les productions if ( is_category('55') ) { query_posts('cat=55'); #query_posts (array('category__and' => array(55,97))); if ( have_posts('') ) while ( have_posts() ) : the_post(); ?> <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <h1 class="entry-title"><?php the_title(); ?></h1> <div class="entry-content"> <?php the_content(); ?> <?php wp_link_pages( array( 'before' => '<div class="page-link">' . __( 'Pages:', 'twentyten' ), 'after' => '</div>' ) ); ?> <?php edit_post_link( __( 'Edit', 'twentyten' ), '<span class="edit-link">', '</span>' ); ?> </div><!-- .entry-content --> </div><!-- #post-## --> <?php endwhile; } ?> </div> <!-- fin DIV resultatrechercheajax -->
Partager