je souhaite dans une fonction récursive faire la différence entre le
père et le fils. Le but étant de créer une arborescence pour un site web.
Je m'explique ... dans la fonction donnée ci-joint, l'appel "echo" ou
"print" n'est appellé qu'1 fois ... et donc cela permet d'afficher le
père et le fils ... de la même manière.
Comment dois-je faire pour que par exemple, j'appelle le "père" avec une
couleur bleue et le "fils" avec une couleur rouge ?
Ceci me permettrait donc de faire la différence entre le père et le fils
et de notamment faire un traitement totalement différent ..
Merci beaucoup pour votre aide
voici les sources :
<?php
// Cette page permet de créer une fonction de récursivité
// But : Créer un menu à partir d'une table mysql afin de créer une
arborescence
// Maintenant, les articles sont ajoutées au fur et à mesure, de manière
à créer un plan du site
require ("connect.php");
// Fonction qui met en forme l'arboresence
function espace($RANG) {
$CH="";
for ($X=0;$X<$RANG;$X++) {
$CH.=" ";
}
return $CH;
}
function liste_article($ID_PERE,$RANG) {
// requete SQL
$REQ_LISTE = "SELECT * FROM article WHERE Rid_arb='$ID_PERE' ";
if (!$REQ2_LISTE = mysql_query($REQ_LISTE)){
print ("Erreur de la requète $REQ_LISTE !<BR>");
exit();
}
// on va parcourir l'ensemble des données
while ($DATA = mysql_fetch_array($REQ2_LISTE)) {
$TITRE=$DATA['titre_article'];
$ID_PERE=$DATA['Rid_arb'];
// Affichage
echo espace($RANG)."<B><A HREF='#.php'>".$TITRE."</A></B><BR>";
}
}
function recursive($PERE,$RANG) {
// requete SQL
$REQ_ARBO = "SELECT * FROM arborescence WHERE id_arb_parent='$PERE' ";
if (!$REQ2_ARBO = mysql_query($REQ_ARBO)){
print ("Erreur de la requète $REQ_ARBO !<BR>");
exit();
}
// on va parcourir l'ensemble des données
while ($DATA = mysql_fetch_array($REQ2_ARBO)) {
$ID_ENFANT=$DATA['id_arb'];
$ID_PERE=$DATA['id_arb_parent'];
$NOM_CAT=$DATA['nom_cat'];
// Si l'id de la catégorie est une catégorie PERE
if($ID_PERE==$PERE) {
// On affiche les fils
echo espace($RANG).$NOM_CAT."<BR>";
recursive($ID_ENFANT,$RANG+1);
liste_article($ID_ENFANT,$RANG+2);
}
}
}
// On appel la fonction dans la page
recursive(0,0);
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Guillaume Bouchard
Remy LAPLEIGE wrote:
Bonjour,
Bonjour,
je souhaite dans une fonction récursive faire la différence entre le père et le fils. Le but étant de créer une arborescence pour un site web.
Oki.
Comment dois-je faire pour que par exemple, j'appelle le "père" avec une couleur bleue et le "fils" avec une couleur rouge ?
Ce qui m'embete c'est que chaques fils à forcement un pere qui peut être le fils d'un autre ? Tu ne veux que le pere principal en bleu ?
require ("connect.php");
// Fonction qui met en forme l'arboresence function espace($RANG) { $CH=""; for ($X=0;$X<$RANG;$X++) { $CH.=" "; } return $CH; }
ou plus simplment avec str_repeat(' ', 4 * $RANG); Maitenant je pense que pour ton rendu html t t'y prend mal à coup de Il faudrait mieux utiliser des listes :
function liste_article($ID_PERE,$RANG) { // requete SQL $REQ_LISTE = "SELECT * FROM article WHERE Rid_arb='$ID_PERE' ";
Si ton ID_PERE est un entier, pourquoi le proteger par des quotes ?
function recursive($PERE,$RANG) { [...] // on va parcourir l'ensemble des données while ($DATA = mysql_fetch_array($REQ2_ARBO)) { $ID_ENFANT=$DATA['id_arb']; $ID_PERE=$DATA['id_arb_parent']; $NOM_CAT=$DATA['nom_cat'];
// Si l'id de la catégorie est une catégorie PERE if($ID_PERE==$PERE) { // On affiche les fils echo espace($RANG).$NOM_CAT."<BR>";
recursive($ID_ENFANT,$RANG+1);
Tu rappels la fonctione pour voir si le fils à des fils. Ok ?
liste_article($ID_ENFANT,$RANG+2);
Pourquoi $rang + 2 ? Soit je n'ai rien comprit à ton algo, soit il y a comme un problème... (j'opterais pour la solution 1, je suis fatigué, mais on ne sais jamais.)
Si j'ai bien comprit, tu as une arborescense de categories et des articles qui sont associés à des categories.
Déjà, je ne connais pas la taille de ton arboresence de categories, mais si elle n'est pas immense, pourquoi ne pas récuprer d'un seul jet, cela t'eviteras de faire plusieurs requetes SQL au prix seulement d'un petit peu de code PHP. (À quand un systeme de select sous forme d'arboresences ? Je sais que c'est possible avec un autre schema de table.)
Après il est trés simple comme tu l'as fait de selectionner les articles qui correspondent à une categorie. Mais je ne comprand pas pourquoi $rang + 2 ?
-- Guillaume.
Remy LAPLEIGE wrote:
Bonjour,
Bonjour,
je souhaite dans une fonction récursive faire la différence entre le
père et le fils. Le but étant de créer une arborescence pour un site web.
Oki.
Comment dois-je faire pour que par exemple, j'appelle le "père" avec une
couleur bleue et le "fils" avec une couleur rouge ?
Ce qui m'embete c'est que chaques fils à forcement un pere qui peut être
le fils d'un autre ? Tu ne veux que le pere principal en bleu ?
require ("connect.php");
// Fonction qui met en forme l'arboresence
function espace($RANG) {
$CH="";
for ($X=0;$X<$RANG;$X++) {
$CH.=" ";
}
return $CH;
}
ou plus simplment avec str_repeat(' ', 4 * $RANG);
Maitenant je pense que pour ton rendu html t t'y prend mal à coup de
Il faudrait mieux utiliser des listes :
function liste_article($ID_PERE,$RANG) {
// requete SQL
$REQ_LISTE = "SELECT * FROM article WHERE Rid_arb='$ID_PERE' ";
Si ton ID_PERE est un entier, pourquoi le proteger par des quotes ?
function recursive($PERE,$RANG) {
[...]
// on va parcourir l'ensemble des données
while ($DATA = mysql_fetch_array($REQ2_ARBO)) {
$ID_ENFANT=$DATA['id_arb'];
$ID_PERE=$DATA['id_arb_parent'];
$NOM_CAT=$DATA['nom_cat'];
// Si l'id de la catégorie est une catégorie PERE
if($ID_PERE==$PERE) {
// On affiche les fils
echo espace($RANG).$NOM_CAT."<BR>";
recursive($ID_ENFANT,$RANG+1);
Tu rappels la fonctione pour voir si le fils à des fils. Ok ?
liste_article($ID_ENFANT,$RANG+2);
Pourquoi $rang + 2 ? Soit je n'ai rien comprit à ton algo, soit il y a
comme un problème... (j'opterais pour la solution 1, je suis fatigué,
mais on ne sais jamais.)
Si j'ai bien comprit, tu as une arborescense de categories et des
articles qui sont associés à des categories.
Déjà, je ne connais pas la taille de ton arboresence de categories, mais
si elle n'est pas immense, pourquoi ne pas récuprer d'un seul jet,
cela t'eviteras de faire plusieurs requetes SQL au prix seulement d'un
petit peu de code PHP. (À quand un systeme de select sous forme
d'arboresences ? Je sais que c'est possible avec un autre schema de table.)
Après il est trés simple comme tu l'as fait de selectionner les articles
qui correspondent à une categorie. Mais je ne comprand pas pourquoi
$rang + 2 ?
je souhaite dans une fonction récursive faire la différence entre le père et le fils. Le but étant de créer une arborescence pour un site web.
Oki.
Comment dois-je faire pour que par exemple, j'appelle le "père" avec une couleur bleue et le "fils" avec une couleur rouge ?
Ce qui m'embete c'est que chaques fils à forcement un pere qui peut être le fils d'un autre ? Tu ne veux que le pere principal en bleu ?
require ("connect.php");
// Fonction qui met en forme l'arboresence function espace($RANG) { $CH=""; for ($X=0;$X<$RANG;$X++) { $CH.=" "; } return $CH; }
ou plus simplment avec str_repeat(' ', 4 * $RANG); Maitenant je pense que pour ton rendu html t t'y prend mal à coup de Il faudrait mieux utiliser des listes :
function liste_article($ID_PERE,$RANG) { // requete SQL $REQ_LISTE = "SELECT * FROM article WHERE Rid_arb='$ID_PERE' ";
Si ton ID_PERE est un entier, pourquoi le proteger par des quotes ?
function recursive($PERE,$RANG) { [...] // on va parcourir l'ensemble des données while ($DATA = mysql_fetch_array($REQ2_ARBO)) { $ID_ENFANT=$DATA['id_arb']; $ID_PERE=$DATA['id_arb_parent']; $NOM_CAT=$DATA['nom_cat'];
// Si l'id de la catégorie est une catégorie PERE if($ID_PERE==$PERE) { // On affiche les fils echo espace($RANG).$NOM_CAT."<BR>";
recursive($ID_ENFANT,$RANG+1);
Tu rappels la fonctione pour voir si le fils à des fils. Ok ?
liste_article($ID_ENFANT,$RANG+2);
Pourquoi $rang + 2 ? Soit je n'ai rien comprit à ton algo, soit il y a comme un problème... (j'opterais pour la solution 1, je suis fatigué, mais on ne sais jamais.)
Si j'ai bien comprit, tu as une arborescense de categories et des articles qui sont associés à des categories.
Déjà, je ne connais pas la taille de ton arboresence de categories, mais si elle n'est pas immense, pourquoi ne pas récuprer d'un seul jet, cela t'eviteras de faire plusieurs requetes SQL au prix seulement d'un petit peu de code PHP. (À quand un systeme de select sous forme d'arboresences ? Je sais que c'est possible avec un autre schema de table.)
Après il est trés simple comme tu l'as fait de selectionner les articles qui correspondent à une categorie. Mais je ne comprand pas pourquoi $rang + 2 ?