Accueil > Forum > > > > récursivité
récursivité
lundi 21 décembre 2009 à 18:42:50 |
récursivité

eltyty
|
Bonjour,
Je souhaite faire une boucle récursive afin d'afficher mes rubriques et sous rubriques. Mais pour éviter une trop grande longueur de page je souhaiterai faire ça en deux colonnes quand le nombre de rubrique est trop important.
Voici ma table :
id_rubrique id_parent last (j'indique "oui" quand c'est la dernière rubrique)
Pour ma boucle voici le code ci-dessous qui fonctionne en fonction d'un id passé dans l'url :
Code PHP :
CLASS Affichage_recap_rubrique {
public $liste;
public $erreur;
FUNCTION __construct() {
}
public function Liste_rubriques($parent,$profondeur) {
$connexion = SPDO::getInstance();
$sql =' SELECT id_rubrique,id_parent,id_groupe,last, titre,archive, statut,descriptif FROM rubriques WHERE id_parent= ? AND id_groupe!="user" AND archive="'.VISUALISER_ARCHIVE.'"';
$sql .=' OR id_parent= ? AND id_groupe="user"';
try{
$select=$connexion->prepare($sql);
$select->bindParam(1,$parent, PDO::PARAM_INT);
$select->bindParam(2,$parent, PDO::PARAM_INT);
}
catch (PDOException $e) {
throw new myException('la requête préparée est incorrecte');
exit();
}
$select->execute();
$nb = $select->rowCount();
IF ($nb===0){
RETURN FALSE;
}
//SI DES ENREGISTREMENTS EXISTE
IF ($nb>0) {
WHILE ($fils=$select->fetch(PDO::FETCH_OBJ)) {
$this->titre=$fils->titre;
$this->id_rubrique=$fils->id_rubrique;
$this->id_parent=$fils->id_parent;
$this->last=$fils->last;
//MET UNE MARGE À 0 POUR LA RUBRIQUE PRINCIPALE ET APRÈS ÇA VA DE 40 EN 40
$espace=40*$profondeur;
//SI 'EST LA DENIÈRE RUBRIQUE
//ON MET LE LIEN PUR AFFICHER LA LISTE DES INFOS D'OÙ ACTON=LISTER
IF ($this->last===oui){
$this->liste.= '<div style="padding-left:'.$espace.'px"class="lien_rubrique"><a href="./index.php?p=articles&rub='.$this->id_rubrique.'&action=lister"title="Liste des infos">'.$this->titre.'</a>';
$this->liste.= '</div>';
}
//SI C'EST PAS LA DERNIERE RUBRIQUE
ELSE{
$this->liste.= '<div style="padding-left:'.$espace.'px"class="lien_rubrique"><a href="./index.php?p=articles&rub='.$this->id_rubrique.'&action=recap&nom='.Filtres::enlever_accents($this->titre).'"title="Récapitulatif des rubriques">'.$this->titre.'</a>';
$this->liste.= '</div>';
}
$this->Liste_rubriques($this->id_rubrique,$profondeur + 1);
}
}
}
/*******************************************************************
OBTIENT LE NOM DE LA RUBRIQUE DANS LE GET ET
SON ID_APRENT QUE L'ON ENVOIE À LA FONCTION LISTE_RUBRIQUES
******************************************************************/
PUBLIC function set_rubrique($g_id_rub=NULL){
IF (!EMPTY($g_id_rub)){
$connexion = SPDO::getInstance();
$sql =' SELECT id_parent,titre FROM rubriques WHERE id_rubrique= ? AND id_groupe!="user" ';
$sql .=' OR id_rubrique= ? AND id_groupe="user"';
try{
$select=$connexion->prepare($sql);
$select->bindParam(1,$g_id_rub, PDO::PARAM_INT);
$select->bindParam(2,$g_id_rub, PDO::PARAM_INT);
}
catch (PDOException $e) {
throw new myException('la requête préparée est incorrecte');
exit();
}
$select->execute();
$nb_tt = $select->rowCount();
IF ($nb_tt>0){
$fils=$select->fetch(PDO::FETCH_OBJ);
$g_titre=$fils->titre;
$id_parent=$fils->id_parent;
$this->titre_rubrique= 'Sommaire de '.$g_titre;
//SI ON EST À LA RACINE ON NE MET PAS LE LIEN CAR ON PEUT PAS REMONTER PLUS HAUT
IF ($id_parent>0){
$this->lien=' <font size="3"><a href="./index.php?p=articles&rub='.$id_parent.'&action=recap"title="Revenir en arrière"><b> ../</b></a></font><br /><br />';
}
$this->Liste_rubriques($g_id_rub,0);
}
//SI LA RUBRIQUE NE RETOURNE AUCUN ENREGISTREMENT
ELSE{
$this->titre_rubrique= "<center><h1>Aucun élément ne peut être affiché</h1></center>";
}
}
ELSE {
ECHO 'Valeur incorrecte';
}
}
}
Cette classe marche mais bien sûr tout est en ligne. Et comme la fonction est récursive je ne vois pas comment je peux faire en sorte que ça s'affiche en deux colonnes par exemple. Voici ce que ça donne :
Code :
BAT
Liens
témoignages
JAVA
exemples
Bout de codes
témoignages
SQL
exercices
tests
exemples
Donc si quelqu'un à partir de ce code peut me montrer, merci beaucoup d'avance.
|
|
lundi 21 décembre 2009 à 21:27:48 |
Re : récursivité

JulSoft
|
Peut être qu'on peut faire ça avec un paramètre statique de ta classe comme compteur, et faire des colonnes dans un tableau à partir de ça...
|
|
mardi 22 décembre 2009 à 08:31:03 |
Re : récursivité

eltyty
|
euh...mais encore ? j'ai mis déjà tellement de temps à faire cette classe...là je vois pas trop comment faire dans ce cas ?
|
|
mardi 22 décembre 2009 à 23:34:43 |
Re : récursivité

phpAnonyme
|
Salut,
J'ai pas regarder ton code comme il le faut mais, tu dois partir du principe que lorsque $nb atteindra une valeur limite pour qu'une autre colonne soit crée tu clos le div et, tu crée un autre dans le même principe.
Ne pas oublier, l'attribut float dans ton div pour afficher à droite, à gauche bref comme tu veux!
______________________________________________________________________
|
|
mercredi 23 décembre 2009 à 19:22:46 |
Re : récursivité

eltyty
|
Ok ça je vois bien mais c'est l'incrémentation de $nb qui me semble dur du fait que ca soit une boucle récursive...
Donc si ta moyen de regarder le code dans ce cas ;-)
Merci d'avance.
|
|
jeudi 24 décembre 2009 à 14:15:55 |
Re : récursivité

phpAnonyme
|
Ben, comme je te l'ai dit je n'ai fait que survoler le code mais en faite je vois que $nb ne fait que renvoyer le nombre total d'enregistrement.
Tu pourrais faire par exemple, faire entrer un nouvel objet par exemple :
Code PHP : <?php private $coupet = 0; ?>
et dans if($nb>0) :
Code PHP :
<?php
if($this->coupet==($nb/2))
{
echo '</div><div...>';
}
else
{
...Ton code normal
$this->coupet++;
}
?>
______________________________________________________________________
|
|
jeudi 24 décembre 2009 à 14:22:11 |
Re : récursivité

phpAnonyme
|
Moi a écrit
Tu pourrais faire par exemple, faire entrer un nouvel objet par exemple :
Lol, je reprend :
Tu pourrais faire entrer un nouel objet, par exemple :
J'ai faire un aperçu, j'ai beau me relire, je fais toujours des fautes quelques
______________________________________________________________________
|
|
jeudi 24 décembre 2009 à 20:36:54 |
Re : récursivité

kohntark
|
"un nouel objet" => contraction de nouvel et Noël ?
"des fautes quelques " => une fois pour ce que n'est moi pas
"J'ai faire un aperçu"
 t'as déjà commencé les hostilités vinicoles du réveillon phpAnonyme ?
Bonne soirée,
Kohntark -
(c'est un petit clin d'oeil amical tu l'auras compris)
|
|
vendredi 25 décembre 2009 à 01:34:26 |
Re : récursivité

phpAnonyme
|
Mais nonnn c'était exprès...humm !
Au passage, bonne fête à toi
Bon, moi je retourne...
______________________________________________________________________
|
|
samedi 26 décembre 2009 à 06:53:43 |
Re : récursivité

hornet_bzz
|
Hornet bzz
Salut
Et si tu mémorisais au fur et à mesure ce que tu affiches, et que tu passes cette info lors de l'appel récursif, ça te permettrait d'ajouter un test sur l'affichage .. ?
En voilà une bonne idée !
(Autosatisfaction de Noël)
|
|
Cette discussion est classée dans : select, titre, id, parent, rubrique
Répondre à ce message
Sujets en rapport avec ce message
Menu récursif en php et MySQL [ par paguira ]
Je cherche un algorithme pour créer un menu récursif du type : Titre 1 Titre 2 Titre 3 Titr
Problème avec une requête contenant LEFT JOIN. [ par MonPied ]
Bonjour, j'explique mon problème, après un sujet ou je demandais de l'aide pour éviter de faire plein de fois une requête un Zéro me proposa d'uti
Réflexion et amélioration du code [ par eltyty ]
Bonjour,je met en place un fils d'Ariane, mon code marche mais comme je débute je pense qu'il y a possibilité d'améliorer largement le code.Donc si qu
bug sous IE 7 & 8 - parfait sous FF [ par laubro ]
bonjourvoilà j'ai un script ajax pour mettre a jour des select en fonction de la selection du select précédant, dans le cadre d'une inscription et don
Verification de l'existance d'un ID dans une base mysql [ par Fildomen ]
Bonjour, j'ai beau chercher sur le net mais je trouve que des codes pour les select qui retourne plusieurs enregistrements, comme mon ID est unique, m
Instruction require_once() et erreur "supplied argument is not a valid MySQL" [ par karpediem ]
Bonjour @ toutezéatous,J'ai une question toute bête, j'ai presque honte de la poser, mais je vais prendre sur moi ;o))J'ai une page php qui est appell
recuperer l'id d'un enregistrement grace a un clik!!!! [ par snakers07 ]
bonjour tout le monde, je vous presente le probleme je suis sous php mysql, j'ai creer mes base, afficher les resultats grace au requete, mais la je b
recuperer id d'une ligne tableau sur un clique [ par snakers07 ]
bonjour tout le monde, voila mon probleme, je n'arrive pas à récuperer l'id d'une ligne d'un tableau. je precise le tableau est le resultat d'une requ
Synthaxe des requetes avec valeur $_POST [ par vinz29 ]
Bonjour, Je débute en PHP, et je bloque sur l'affichage d'une requête depuis 2 jours... Voilà, j'effectue une requête vers une base MySQL à partir d'
on select execute une function [ par alamandra ]
salut à tous , alors voilà j'ai un souci avec un select, arrrffff un champ reputation dans une table users, une page account-details sur laq
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|