begin process at 2012 05 28 23:27:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Catégorie illimité , sous-catégorie^n etc...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Catégorie illimité , sous-catégorie^n etc...

jeudi 2 novembre 2006 à 13:12:05 | Catégorie illimité , sous-catégorie^n etc...

tibine974

Bonjour à tous !!

Voilà mon probléme je dois construire une application qui doit permettre d'ajouter des catégories , sous-catégorie, sous-sous-catégorie ( un nombre illimité avec des profondeurs aussi illimités ) .

ex :
  • Cat A
    • Sous-Cat A_0
    • Sous-Cat A_1
      • Sous-sous Cat A_1_0
        • Sous-sous-sous Cat A_1_0_0
          • Sous-sous-sous Cat A_1_0_0
          • etc...
  • Cat B
  • Cat C
Mais voilà je bloque sur la maniére de créer ma base et mes requêtes.
J'ai pensé que vu que je ne savais pas combien de catégorie , ss-cat etc... je comptais mettre tous dans une même table : voir ci dessous :

CREATETABLE`table`(
`cat_id`INT(5)NOTNULLAUTO_INCREMENTPRIMARYKEY,
`cat_libelle`VARCHAR(255)NOTNULL,
`cat_parent`INT(5)NOTNULL
)ENGINE=innodb;

Cat_parent  : pour l'élément qui correspond à une Catégorie, le cat_parent est égale à 0 . Pour les sous-cat , il correspondra à l'id de l'élément dont il est le parent.

Voici ma question : est-ce que ce systéme vous semble correct , sinon voyez-vous une autre solution ??

Merci d'avance pour les réponses positives ou négatives, car j'avoue bloquer .



jeudi 2 novembre 2006 à 13:33:57 | Re : Catégorie illimité , sous-catégorie^n etc...

JulSoft

Membre Club
Je pense que c'est la seule façon que tu puisse utiliser. ça marche pas trop mal (quand même pas mal de requetes pour tout récupérer et trier).

Après ce que tu peux faire pour éviter les requetes multiples est de créer une classe catégorie qui comprenne un champ "sous_categories" qui lui contien un nouvel élément catégorie. ça peut peut être t'éviter de faire 300 requetes mysql, mais je ne suis sur de rien (pas testé).
jeudi 2 novembre 2006 à 18:04:53 | Re : Catégorie illimité , sous-catégorie^n etc...

malalam

Administrateur CodeS-SourceS
Hello,

je pense aussi que c'est la seule solution.
Mais j'éviterais les requêtes multiples pour trouver toutes les occurences liées à une catégorie. Je récupèrerais tout dans un tableau multidimensionnel, et ferais le tri en PHP (l'algo est simple, en php).

jeudi 2 novembre 2006 à 20:30:20 | Re : Catégorie illimité , sous-catégorie^n etc...

tibine974

Re !

Tout d'abord merci pour les réponses ! Comme tu l'as dit malalam moi aussi j'ai pensé récupérer dans un tableau multidimensionnel. Mais voilà , un autre probléme survient comment trier ce dit tableau , voici ce que cela donne aprés la requête :

$stockage = array (
  array (1, "cat a",  0 )  ,
  array (2 , "cat b",  0 ) ,
  array (3 , "cat c",  0 ) ,
  array (4 , "sous-cat a_0",  1 ) ,
  array (5 , "sous-cat a_1",  1 ) ,
  array (6 , "sous-sous cat a_1_0",  5 ) ,
  array (7 , "sous-sous-sous cat a_1_0_0",  6 )
);

Je sais ensuite qu'il faut passer en boucle le tableau, mais à l'intérieur de la boucle je ne vois pas comment faire pour que le array1 recherche dans les autres array la valeur souhaité .

foreach ( $stockage as $tab => items ):

endforeach;


Si vous avez un début de réponse ou me proposer une démarche je suis preneur . merci d'avance


Meuh ! Fais la vache
vendredi 3 novembre 2006 à 00:29:28 | Re : Catégorie illimité , sous-catégorie^n etc...

JulSoft

Membre Club
je reste convaincu que c'est possible (probablement plus simple) avec des classes... donne moi un peut de temps que je te bricole quelque chose...
vendredi 3 novembre 2006 à 06:13:39 | Re : Catégorie illimité , sous-catégorie^n etc...

tibine974

Merci à toi de regarder mon probléme ! moi aussi de mon côté je continue de chercher.On se tient au courant :

Meuh ! Fais la vache
lundi 6 novembre 2006 à 00:59:09 | Re : Catégorie illimité , sous-catégorie^n etc...

JulSoft

Membre Club
Réponse acceptée !
Voilà... c'est un peu spaghetti, pas des masses commenté, mais ça a l'air de marcher

<?php
// objet "cat"
class cat{
    // variables
    var $id;
    var $nom;
    var $enfants;
    // constructeur
    function cat($id,$nom){
        $this->id = $id;
        $this->nom = $nom;
        $this->enfants = array();
    }
}
// fonction  de récursivité
function setchild($parent,$id_parent,$id,$nom){
    if($parent->id==$id_parent){
        // on set
        $parent->enfants[count($parent->enfants)] = new cat($id,$nom);
        return 1;
    }else{
        for($j=0;$j<count($parent->enfants);$j++){
            // on parcours les enfants et on applique la récurence
            if(setchild($parent->enfants[$j],$id_parent,$id,$nom)==1){
                // c'est bon
                return 1;
            }
        }
        return 0;
    }
}
// fonction d'affichage récursif
function display($parent){
    echo $parent->nom ."<br />";
    for($i=0;$i<count($parent->enfants);$i++){
        display($parent->enfants[$i]);
    }
}
// ouverture mysql
$db_link = mysql_connect("localhost","root","");
mysql_select_db("test");
$requete = mysql_query("select * from table_cat",$db_link)or die(mysql_error());
// conteneur des cats...
    $objs = array();
// on parcours les résultats
    for($i=0;$i<mysql_num_rows($requete);$i++){
        $nom = mysql_result($requete,$i,'nom');
        $id = mysql_result($requete,$i,'id');
        $parent = mysql_result($requete,$i,'parent');
        // on enregistre le nouvel objet...
        if($parent==0){
            $objs[count($objs)] = new cat($id,$nom);
        }else{
            // par récursivité on tente de trouver le parent
            for($j=0;$j<count($objs);$j++){
            // on parcours les enfants et on applique la récurence
            if(setchild($objs[$j],$parent,$id,$nom)==1){
                // c'est bon
                break;
            }
        }
        }
    }
// on devrait tout avoir...
// on affiche
    for($i=0;$i<count($objs);$i++){
        display($objs[$i]);
    }
// fermeture mysql
mysql_close($db_link);
?>

pour ce qui est de la table mysql:

"id";"nom";"parent"
"1";"cat1";"0"
"2";"cat2";"0"
"3";"cat3";"0"
"4";"subcat2.1";"2"
"5";"subcat1.1";"1"
"6";"subcat2.1.1";"4"
"7";"subcat1.2";"1"
"8";"subcat1.1.1";"5"

Voilà, n'hésite pas à demander si t'as rien compris, il est tard quand je poste...

lundi 6 novembre 2006 à 01:01:35 | Re : Catégorie illimité , sous-catégorie^n etc...

JulSoft

Membre Club
Pour ce qui est du tri, tu tries les parents puis par récurence les enfants... tout ça dans la joie et la bonne humeur
mardi 7 novembre 2006 à 07:12:44 | Re : Catégorie illimité , sous-catégorie^n etc...

tibine974

Re !!
Je viens de regarder et tester ton code , cela à l'air de bien marcher . Merci encore d'avoir regardé mon probléme.

++


Meuh ! Fais la vache
lundi 20 novembre 2006 à 13:59:16 | Re : Catégorie illimité , sous-catégorie^n etc...

prophete56

Salut

Je travaille sur un problème similaire mais je suis bloqué....

Je voudrais   
 - pouvoir deplacer par categories ou sous catégories
 - pouvoir ajouter un controle sur la suppression des catégories (si il existe des sous categories )

etc...

1 2

Cette discussion est classée dans : cat, parent, catégorie, illimité, 0sous


Répondre à ce message

Sujets en rapport avec ce message

Transformer Menu Fixe en dynamique [ par Programmeur1987 ] Bonjour, depuis plusieur jour je me casse la tête à tenter de rentre mon menu dynamique c'est pour un espece de magasin en ligne et il récupère les it Présentation des résultats d'une requete 3 par ligne [ par yvain91 ] Bonjour,Avec une requête, je récupère le nom des catégories de mon site. J'arrive à afficher chaque nom de catégorie dans une ligne de tableau. Je sou Classer contacts par catégories [ par matt38100 ] Bonjour à tous et toutes. Je suis en train de dévellopper un petit annuaire de contacts en PHP/MySQL et j'aurais besoin d'un petit coup de pouce pour affichage de la hiérarchie d'une sous-catégorie [ par oceanrider ] Bonjour,Je cherche ici une réponse que je n'ai pas encore pu trouver ailleurs, alors qu'il s'agit surement d'un problème assez commun.J'ai réalisé une PB CSS [ par yoarf ] Bonjour,Voici le style css de ma liste :#menu LI{    list-style-type: none;    padding-top:5px;    padding-bottom:0px;    padding-left: 5px;}page:&nbs Vérifier qu'une valeur existe dans une table [ par Rimb0 ] Bonjour à tous, je voudrais vérifier qu'une valeur n'existe pas déjà dans une table.Voici ce que j'ai écrit :Adresse de ma page : index.php?cat=cool$c Update d'une liste [ par malice ] Bonjour,Je suis en train de construire mes premiers scripts et j'ai un petit soucis avec l'update d'une liste, je m'explique.Dans une table, j'ai des extraction de donnée [ par clovismaj ] Bonjour,Comment dire j'ai 2 langues qui selon le choix est en session sur une page appellé produit, dans cette page j'ai plusieurs category dont certa str_replace [ par yoarf ] Bonjour,Je voudrais dans une chaine remplacer les cotes (') par des espaces:Cela ne fonctionne pas : $cat = str_replace('&quot;','&nbsp;',$cat);       Ajout des identifiants [ par ldevun ] Bonjour,J'ai une BDD avec des catégories, des sous catégories, des produits. Les catégorie ont un id, les sous catégories ont un id aussi et les produ


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales