login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Eeuwige submenu's (Opgelost)

Offline ikki007 - 15/09/2007 12:00
Avatar van ikki007Gouden medailleGouden medaille

PHP ver gevorderde
Hey,

Ik wil het volgende creëren.
Men voegt bijvoorbeeld een categorie toe.
Maar men kan ook een parent kiezen.

Bijvoorbeeld men voegt een categorie zonder parent toe (dan is deze parent 0) dan is het een categorie die als eerste is zegmaar.
De id van deze zojuist toegevoegde categorie is bijvoorbeeld 2.

En als men dan nog een categorie toevoegd en men kiest als parent 2 moet deze onder die eerste categorie komen met het ID 2. (stel dit heeft ID 3)

Maar, men kan ook onder de categorie met het ID 3 weer toevoegen enzovoort.

Ik heb dus nu zoiets:

  1. <?php
  2. $query = mysql_query("SELECT * FROM menus WHERE parent = 0 ORDER BY pid ASC");
  3.  
  4. while($arr = mysql_fetch_array($query))
  5. {
  6. print $arr['text'].'<br />';
  7.  
  8. $x = 0;
  9.  
  10. for($i = 1; $i < 2; $x++)
  11. {
  12.  
  13. $query2 = mysql_query("SELECT * FROM menus WHERE parent = ".$arr['id']." ORDER BY pid ASC");
  14.  
  15. if(@mysql_num_rows($query2) > 0)
  16. {
  17. while($arr = mysql_fetch_array($query2))
  18. {
  19.  
  20. print '- - '.$arr['text'].'<br />';
  21.  
  22. }
  23. }
  24. else
  25. {
  26. $i = 3;
  27. }
  28.  
  29. }
  30.  
  31. }
  32. ?>


De categorieen staan als volgt in de database opgeslagen:

http://i7.tinypic.com/67z4eh2.jpg

Nu moet de output zijn:

yt
-- aaaYT
-- bbbYT
--- braat
--- agagaga
ty
-- aaaTY

Alleen nu is mijn output:

yt
-- aaaYT
-- bbbYT
ty
-- aaaTY

Hoe moet ik het aanpassen dat het dus alles ophaald?

Gr,
Jarno

6 antwoorden

Gesponsorde links
Offline Grayen - 15/09/2007 12:54
Avatar van Grayen PHP ver gevorderde Zoiets zou moeten werken, heb het niet kunnen testen, dus er kunnen nog wat foutjes in zitten.

  1. <?php
  2. if(($rResult = mysql_query('SELECT * FROM menus ORDER BY pid ASC')) !== false && mysql_num_rows($rResult) > 0)
  3. {
  4. function submenu($aCurrent, $aRows, $iLayer = 0)
  5. {
  6. foreach($aRows as $iKey => $aRow)
  7. {
  8. if($aRow['parent'] == $aCurrent['id'] || $aRow['parent'] == 0)
  9. {
  10. print str_repeat('- ', $iLayer).$aRow['text'].'<br />';
  11.  
  12. unset($aRows[$iKey]);
  13.  
  14. submenu($aRow, $aRows, $iLayer + 1);
  15. }
  16. }
  17.  
  18. return true;
  19. }
  20.  
  21. $aRows = array();
  22.  
  23. foreach(($aRow = mysql_fetch_assoc($rResult)) !== false)
  24. {
  25. $aRows[] = $aRow;
  26. }
  27.  
  28. $aRow = array_shift($aRows);
  29.  
  30. submenu($aRow, $aRows);
  31. }
  32. ?>
Offline ikki007 - 15/09/2007 13:48 (laatste wijziging 15/09/2007 23:14)
Avatar van ikki007 Gouden medailleGouden medaille

PHP ver gevorderde
Die foreach op 23 moest while zijn neem ik aan ?  

Output:

ty
- aaaTY
aaaYT
bbbYT
- braat
- agagaga

Klopt niet helemaal dus

EDIT: Wat heeft die array_shift($aRows) voor nut dan?

Output zonder die array shift:

yt
- ty
- - aaaTY
- aaaYT
- bbbYT
- - braat
- - agagaga
ty
- aaaTY

Die klopt bijna, alleen onder yt staan nog wat foute. : 
Offline Grayen - 16/09/2007 09:53
Avatar van Grayen PHP ver gevorderde zou je met phpmyadmin ff jouw tabel kunnen geven? Dan kan ik je wel verder helpen.
Offline ikki007 - 16/09/2007 10:59
Avatar van ikki007 Gouden medailleGouden medaille

PHP ver gevorderde
Tuurlijk  

  1. CREATE TABLE `menus` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `parent` int(11) NOT NULL DEFAULT '0',
  4. `pid` int(11) NOT NULL DEFAULT '0',
  5. `text` varchar(255) NOT NULL DEFAULT '',
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;
  8.  
  9. INSERT INTO `menus` VALUES (21, 20, 6, 'braat');
  10. INSERT INTO `menus` VALUES (20, 16, 5, 'bbbYT');
  11. INSERT INTO `menus` VALUES (19, 17, 4, 'aaaTY');
  12. INSERT INTO `menus` VALUES (18, 16, 3, 'aaaYT');
  13. INSERT INTO `menus` VALUES (17, 0, 2, 'ty');
  14. INSERT INTO `menus` VALUES (16, 0, 1, 'yt');
  15. INSERT INTO `menus` VALUES (22, 20, 7, 'agagaga');
Offline Grayen - 16/09/2007 13:28
Avatar van Grayen PHP ver gevorderde Alstu 

  1. if(($rResult = mysql_query('SELECT * FROM menus ORDER BY pid ASC')) !== false && mysql_num_rows($rResult) > 0)
  2. {
  3. function submenu($iCurrent, $aRows, $iLayer = 0)
  4. {
  5. foreach($aRows as $iKey => $aRow)
  6. {
  7. if($aRow['parent'] == $iCurrent)
  8. {
  9. print str_repeat('- ', $iLayer).$aRow['text'].'<br />';
  10.  
  11. unset($aRows[$iKey]);
  12.  
  13. submenu($aRow['id'], $aRows, $iLayer + 1);
  14. }
  15. }
  16.  
  17. return true;
  18. }
  19.  
  20. $aRows = array();
  21.  
  22. while(($aRow = mysql_fetch_assoc($rResult)) !== false)
  23. {
  24. $aRows[] = $aRow;
  25. }
  26.  
  27. submenu(0, $aRows);
  28. }
Offline ikki007 - 16/09/2007 13:49
Avatar van ikki007 Gouden medailleGouden medaille

PHP ver gevorderde
Echt helemaal fantastisch wat jij hier hebt neergezet  

Ben je heel erg dankbaar, nu kan ik weer verder  
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.214s