Prob menu niveau infinis [2]

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 : Prob menu niveau infinis [2]

Ca y'est !!!

par Merlin82 » 25 août 2006, 16:20

Salut,
Merci à tous pour le coup de main ! Ca fait toujours plaisir de voir qu'on peut se faire aider quand on est coince !
Je sais que beaucoup de monde chercher une solution à ce problème...
je vous donne la fonction pour afficher les infos.
A+
function recherche_niveau($param,$niv){
	$espace = "      ";
	$result = mysql_query("SELECT * FROM menu WHERE parent_id = $param ORDER BY id ASC");
	while ($row  =  mysql_fetch_array($result,MYSQL_NUM)) {
		$i = 1;
		while($i < $niv){
			echo $espace;
			$i++;
		}
		echo $row[2].".".$niv."<br>";
		$niv=$niv+1;

		recherche_niveau($row[0],$niv);	
		$niv--;
	}
}

l'appel de la fonction:

$param  = 0;
$niv = 1;
recherche_niveau($param,$niv);

par aelurus » 24 août 2006, 20:49

Sinon une piste
http://www.comscripts.com/scripts/php.a ... u.679.html

je pense que cela peux te faire une bonne base de depart et ou inspiration

par graphistnet » 24 août 2006, 17:26

Une solution serait de définier dans le champs parent_id le niveau du menu/sous-menu, je m'explique :

Admettons que tu aies deux partie dans le menu :

Code : Tout sélectionner

1ere partie : id=1 parent_id=0 2eme partie : id=2 parent_id=0
Un sous-menu dans la 1ere partie et deux sous_menu dans la partie 2 :

Code : Tout sélectionner

sous_menu1 : id=3 parent_id=1 sous_menu2 : id=4 parent_id=2 sous_menu3 : id=5 parent_id=2
Jusque là nous utilisons donc ton principe, rajoutons maintenant un sous-sous-menu dans le sous_menu2 par exemple et nous aurons

Code : Tout sélectionner

sous_sous_menu1 : id=6 parent_id=2|4
Et ainsi de suite en rajoutant un séparateur par niveau.

par Merlin82 » 24 août 2006, 17:03

Excuses... j'en oubliais le principale.
Quelques personnes du forum ont déjà planché sur le problème lundi.

Ma table contient les champs suivants :

Code : Tout sélectionner

`id` int(4) NOT NULL auto_increment, `parent_id` int(4) NOT NULL default '0', `node_name` varchar(255)', `node_url` varchar(255)',
Admettons que j'y insère les données suivantes :

Code : Tout sélectionner

ID Parent_id Nom 1 0 Accueil 2 0 Magasin 3 0 Contact 4 2 Suisse 5 2 France 6 4 Lausanne 7 4 Genève 8 4 Zurich 9 5 Paris 10 5 Marseille
Le but et d'y sortir un tableau (plus tard un menu) qui permet d'afficher la structure du menu.

les enregistrements ayant 0 sous parent_id sont des catégories principales.

Les autres enregistrements sont des sous-rubriques de l'enregistrement indiqué sous parent_id . Par exemple, d'après le tableau, on voit que Marseille est un sous-menu de France et que Zurich est un sous-menu de Suisse. Par contre Accueil, magasin et Contact sont des rubriques principales.

Le but est que l'utilisateur puisse gérer son menu avec des niveaux infinis.
afficher le premier niveau se fait sans problème, en sélectionnant les enregistrements ayant 0 sous parent_id, le 1er sous menu aussi, mais après je suis quotte ! :oops:

Je vois vraiment pas comment on peut faire ce test en continue (sans passer par le pôle nord et sans TGV lol ) :D

par iclo » 24 août 2006, 16:55

On veut bien t'aider, mais si tu ne nous dis pas ce que tu veux faire, on ne peut pas t'aider...

par Merlin82 » 24 août 2006, 16:51

Salut, merci de ta réponse rapide.

J'ai déjà passé 3 jours complets sur cette fonction qui me semblait en fait toute simple, mais je suis bloqué...

Il m'a dit que de son côté en delphi ca marchait terrible... ce qui veut dire qu'en PHP ca doit quand même être faisable...

J'ai trouvé une multitude de site ou il en parlait... mais personne n'a trouvé de solution....

Tout ce que j'arrive à faire, lol c'est planté mon navi parce que mes boucles tourne à l'infini lol

T'as pas une idée?

par iclo » 24 août 2006, 16:46

Salut,

Désolé mais je me permets d'émettre de gros doutes sur les chances de succès de traduire du code d'un langage de 4ème génération tel que Delphi, en un code php. Ce sont deux technologie très très différentes.

Il y a surement moyen de parvenir au résultat que tu attends au final, mais partir d'un code Delphi, ça revient à passer par le Pole Nord, en voulant se rendre de Paris à Marseilles (Le TGV est tellement mieux en +)
Sérieusement, il vaut mieux que tu partes de rien, et que tu programmes ce que tu as besoin directement en php.

Expliques nous plutot ce que tu souhaites faire...

Prob menu niveau infinis [2]

par Merlin82 » 24 août 2006, 16:38

Salut tout le monde, j'ai posté une question sur le forum lundi.

Un ami m'a proposé de m'écrire le code qu'il me fallait en Delphi.
Prob -> Je n'arrive pas à le traduire, j'y comprend rien.
Quelqu'un connaîtrait le Delphi... et le PHP ?

Salut à tous de Suisse.

Code : Tout sélectionner

procedure TForm1.FormCreate(Sender: TObject); begin With database do Begin close; DatabaseName:='test'; DatabaseFileName:='c:\prov\test.adb'; End; With Table do Begin close; DatabaseName:='test'; TableName:='table'; open; indexname:='in_tab'; End; With Table2 do Begin close; DatabaseName:='test'; TableName:='table'; open; indexname:='in_tab'; End; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Table.close; Table2.close; database.close; end; procedure TForm1.Button1Click(Sender: TObject); begin Table.First; While (not table.Eof) and (table.FieldByName('parent_id').asinteger=0) do Begin showmessage(table.FieldByName('node_name').asstring); recherche_niveau(table.FieldByName('id').asinteger); table.Next; End; end; procedure TForm1.recherche_niveau(param:integer); Var Bmk : TBookMark; begin if table2.FindKey([param]) then Begin While (not table2.Eof) and (table2.fieldbyname('Parent_id').asinteger=param) Do Begin showmessage(table2.FieldByName('node_name').asstring); Bmk:= table2.GetBookmark; recherche_niveau(table2.FieldByName('id').asinteger); table2.Gotobookmark(Bmk); table2.freebookmark(Bmk); table2.next; End; End; end;