Est possible de faire deux boucles pour un affichage <ul&

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Est possible de faire deux boucles pour un affichage <ul&

par coxine » 24 avr. 2007, 16:35

hihi :lol:
Merci pour tout Ryle !! :love1:
Bon j'ai une question mais elle concerne les CSS, donc je ferme ici et je la pose là-bas !

par Ryle » 24 avr. 2007, 15:58

Yep :) Il ne faut pas de "AND" dans les critère de tri, il faut juste spécifier le nom de la ou des colonnes séparées par des virgules :

Code : Tout sélectionner

ORDER BY theme.ss_cat ASC, themes.titre ASC
Le tri se fera ainsi sur les sous catégories, puis par titres à l'intérieur d'une même catégorie (sachant que le ASC est la valeur par défaut du tri, il n'est pas nécessaire de le préciser :)).

par coxine » 24 avr. 2007, 15:33

tu sais quoi !
Ben ça marche du tonnerre !!
Et puis moi qui n'osais pas me lancer dans l'affichage dynamique de tableaux pour une belle mise en page, ça marche aussi.

J'ai une question à 50cts d'euros
Pour le tri :
Je demande : ORDER BY theme.ss_cat ASC....je veux rajouter un "sous-tri" par intulé : AND themes.titre ASC

Ca marche po
Seul le premier tri se fait...le second pas du tout !
Tu as une ID de ce qui déc...???
:lol: :wink:

par Ryle » 24 avr. 2007, 11:27

nia nia nia ... c'était volontaire.. pour te mettre à l'épreuve ma chère padawan ! ;)
(comment ça je suis pas crédible ? :))

Pas de soucis pour les div.. juste faire attention s'ils s'imbriquent de vérifier qu'ils s'ouvrent et se ferment correctement (tu peux avoir besoin de tester si le libellé change pour refermer le div précédent, avant d'ouvrir le nouveau)

par coxine » 24 avr. 2007, 10:58

ben figure toi que je me suis demandé pourquoi :-*
Mais bon comme c un super ganesha qui m'aide !!
:lol:
Merci nickel !!
Bon me reste à intégrer le javascript !
Je peux inclure des <div> dans la boucle !?
Oui certainement.
A+

par Ryle » 24 avr. 2007, 10:48

Euh.. non... l'erreur vient... de moi.. :)
$tmpSousCat != $row_rs['intitule']; // je stocke le nom de la nouvelle rubrique
Faut virer le "!" sinon c'est un test, pas une affectation :)

Ca m'apprendra à faire des copier/coller sans réflechir ;)
(et à toi de faire de même :langue:)

par coxine » 24 avr. 2007, 10:44

coucou et merci de m'exposer des solutions.
alors effectivement je préfère traiter la seconde.
Ca fonctionne, mais dans la boucle, à chaque fois la sous catégorie s'affiche...
:(
<?php $tmpSousCat = "";
	  while ($row_rs= mysql_fetch_assoc($rs)) { 
      if ($tmpSousCat != $row_rs['ss_cat']) { // si le nom de la rubrique est différent de celui dans la tmp 
      echo $row_rs['intitule']; echo'<br/>'; // j'affiche le nom de la rubrique 
      $tmpSousCat != $row_rs['intitule']; // je stocke le nom de la nouvelle rubrique. 
      } 
      echo $row_rs['titre']; echo'<br/>'; // affichage de l'item 
      } 
      ?>
L'erreur viendrait elle de la boucle ?
ou de ma requete ?
$rs= "SELECT themes.ID_form, themes.ss_cat, themes.titre, ss_cat.intitule, 
ss_cat.ss_cat FROM themes, ss_cat 
WHERE themes.ID_cat = 1 AND themes.ss_cat=ss_cat.ss_cat 
ORDER BY themes.ss_cat, themes.code ASC";
Merci de tes éclaircissements !

par Ryle » 24 avr. 2007, 10:00

Tu pourrais tout à fait mettre une boucle à l'intérieur d'une autre, mais ce n'est pas ce qu'il y a de plus optimisé dans ton cas. Voici toutefois un exemple :
// on liste les sous rubriques d'une rubrique donnée
$sqlSousRub = "SELECT liste des sous rubrique WHERE idMégaRubrique = xx";
$rsSousRub = mysql_query(...); 
while (... mysql_fetch_assoc($rsSousRub)) { // on parcoure les sous rubriques
  echo '...'; // affiche le titre de la sous rubrique

  // on liste les items de la sous rubrique
  $sqlItem = "SELECT liste des élément WHERE idSousRubrique = " . $idSousRubrique;
  $rsItem = mysql_query(...); 
  while (... mysql_fetch_assoc($rsItem)) {
    echo '...'; // affiche le titre de l'item
  }
}
Bon, ça c'était juste pour montrer qu'il est tout à fait possible de faire des boucles dans des boucles, mais le problème c'est que cela va générer un nombre important de requête (d'autant plus qu'il y aura de rubriques) et le pire c'est que c'est un nombre que tu ne maitrises pas... :)

Le mieux selon moi dans ce cas, c'est de ne faire qu'une seule requête et de traiter l'affichage avec php :
// je ramene toutes les sous rubriques et éléments, en les triant
$sql = "SELECT sous_rubrique, item FROM .... ORDER BY sous_rubrique, item";
$rs = mysql_query($sql);

$tmpSousRubrique = ""; // je crée une variable temporaire qui contiendra le nom de ma sous rubrique (vide pas défaut)
while (...) {
  if ($tmpSousRubrique != $row['sous_rubrique']) { // si le nom de la rubrique est différent de celui dans la tmp
    echo '...'; // j'affiche le nom de la rubrique
    $tmpSousRubrique != $row['sous_rubrique']; // je stocke le nom de la nouvelle rubrique.
  }

  echo '...'; // affichage de l'item
}
Ainsi tu affiches tous les item, mais tu n'affiches le titre de la rubrique que lorsqu'il est différent :)

par coxine » 23 avr. 2007, 19:18

exactement !
N'afficher qu'une fois la sous rubrique
et ensuite afficher les items
et quand il n'y a plus d'items, on passe à la sous rubrique suivante :D

(je reviens tjs ici, je sais que j'ai des oreilles attentives à mes petits pbs ... :wink: :oops: )

(+) rubrique (je clique elle se déploie
(+) sous rubrique 1 (je clique elle se déploie)
- item 11
- item 12 etc..
(+) sous rubrique 2


etc

En fait ma question : est ce faisable d'inclure une boucle dans une boucle ?
Sachant que sous rubrique 1 et sous rubrique 2 sont appelées dynamiquement dans la requete.
Et les items également (tant qu'il y a des items rattachés à la sous rubrique tu les affiche)

Je ne sais pas comment m'y prendre.
J'utilise du javascript "toggle" pour les déroulés.

par Ryle » 23 avr. 2007, 16:04

Oh tiens, une revenante :)

Euh.. je comprend pas bien ta question.. à priori ta requête te renvoi à chaque fois l'intitulé de la sous rubrique et le titre de l'item ? donc quelque chose du genre :

Code : Tout sélectionner

sous rubrique 1 ; item11 sous rubrique 1 ; item12 sous rubrique 1 ; item13 sous rubrique 2 ; item21 sous rubrique 2 ; item22
Donc tu vas par défaut boucler sur le titre de l'item à chaque enregistrement. En fait le problème ne serait il pas plutot de ne pas afficher la sous rubrique s'il est identique au précédent ? :)

Est possible de faire deux boucles pour un affichage <ul&

par coxine » 23 avr. 2007, 13:17

bonjour
Je suis entrain de construire un plan
Je veux qu'il soit dynamique :

- Intitulé 1
sous rubrique 1
item11
item12
item13
sous rubrique 2
item21
item 22
- intitulé 2

etc....
Sachant que
1. - Intitulé est en dur dans la page, soit le thème principal
Le reste provient d'une base de données et est en affichage dynamique.
<ul class="cat_form">
  <li class="cat_form">Intitulé 1
    <ul>
    <?php do { // j'ouvre la boucle pour les sous cat ?>
      <li class="ss_cat"><?php echo $row_requete['intitule']; //affichage sous cat?>  </li>
        <ul>
          <li class="form"><?php echo $row_requete['titre']; // affichage intitulé de la sous cat...comment le boucler ??></li>
        </ul>
        <?php } while ($row_requete = mysql_fetch_assoc($requete)); ?>
    </ul>
  </li>
</ul>
Voilà, comment boucler le titre ?
Merci de votre aide !!!
:D