Eeuwige submenu's (Opgelost)
ikki007 - 15/09/2007 12:00
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:
<?php
$query = mysql_query("SELECT * FROM menus WHERE parent = 0 ORDER BY pid ASC");
while($arr = mysql_fetch_array($query))
{
print $arr['text'].'<br />';
$x = 0;
for($i = 1; $i < 2; $x++)
{
$query2 = mysql_query("SELECT * FROM menus WHERE parent = ".$arr['id']." ORDER BY pid ASC");
if(@mysql_num_rows($query2) > 0)
{
while($arr = mysql_fetch_array($query2))
{
print '- - '.$arr['text'].'<br />';
}
}
else
{
$i = 3;
}
}
}
?>
<?php
$query = mysql_query ( "SELECT * FROM menus WHERE parent = 0 ORDER BY pid ASC" ) ;
{
print $arr [ 'text' ] . '<br />' ;
$x = 0 ;
for ( $i = 1 ; $i < 2 ; $x ++ )
{
$query2 = mysql_query ( "SELECT * FROM menus WHERE parent = " . $arr [ 'id' ] . " ORDER BY pid ASC" ) ;
{
{
print '- - ' . $arr [ 'text' ] . '<br />' ;
}
}
else
{
$i = 3 ;
}
}
}
?>
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
Grayen - 15/09/2007 12:54
PHP ver gevorderde
Zoiets zou moeten werken, heb het niet kunnen testen, dus er kunnen nog wat foutjes in zitten.
<?php
if(($rResult = mysql_query('SELECT * FROM menus ORDER BY pid ASC')) !== false && mysql_num_rows($rResult) > 0)
{
function submenu($aCurrent, $aRows, $iLayer = 0)
{
foreach($aRows as $iKey => $aRow)
{
if($aRow['parent'] == $aCurrent['id'] || $aRow['parent'] == 0)
{
print str_repeat('- ', $iLayer).$aRow['text'].'<br />';
unset($aRows[$iKey]);
submenu($aRow, $aRows, $iLayer + 1);
}
}
return true;
}
$aRows = array();
foreach(($aRow = mysql_fetch_assoc($rResult)) !== false)
{
$aRows[] = $aRow;
}
$aRow = array_shift($aRows);
submenu($aRow, $aRows);
}
?>
<?php
{
function submenu( $aCurrent , $aRows , $iLayer = 0 )
{
foreach ( $aRows as $iKey => $aRow )
{
if ( $aRow [ 'parent' ] == $aCurrent [ 'id' ] || $aRow [ 'parent' ] == 0 )
{
submenu( $aRow , $aRows , $iLayer + 1 ) ;
}
}
return true ;
}
{
$aRows [ ] = $aRow ;
}
submenu( $aRow , $aRows ) ;
}
?>
Grayen - 16/09/2007 09:53
PHP ver gevorderde
zou je met phpmyadmin ff jouw tabel kunnen geven? Dan kan ik je wel verder helpen.
ikki007 - 16/09/2007 10:59
PHP ver gevorderde
Tuurlijk
CREATE TABLE `menus` (
`id` int(11) NOT NULL auto_increment,
`parent` int(11) NOT NULL default '0',
`pid` int(11) NOT NULL default '0',
`text` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;
INSERT INTO `menus` VALUES (21, 20, 6, 'braat');
INSERT INTO `menus` VALUES (20, 16, 5, 'bbbYT');
INSERT INTO `menus` VALUES (19, 17, 4, 'aaaTY');
INSERT INTO `menus` VALUES (18, 16, 3, 'aaaYT');
INSERT INTO `menus` VALUES (17, 0, 2, 'ty');
INSERT INTO `menus` VALUES (16, 0, 1, 'yt');
INSERT INTO `menus` VALUES (22, 20, 7, 'agagaga');
CREATE TABLE `menus` (
`id` int( 11 ) NOT NULL AUTO_INCREMENT ,
`parent` int( 11 ) NOT NULL DEFAULT '0' ,
`pid` int( 11 ) NOT NULL DEFAULT '0' ,
`text` varchar( 255 ) NOT NULL DEFAULT '' ,
PRIMARY KEY ( `id` )
) ENGINE= MyISAM AUTO_INCREMENT = 23 DEFAULT CHARSET= latin1 AUTO_INCREMENT = 23 ;
INSERT INTO `menus` VALUES ( 21 , 20 , 6 , 'braat' ) ;
INSERT INTO `menus` VALUES ( 20 , 16 , 5 , 'bbbYT' ) ;
INSERT INTO `menus` VALUES ( 19 , 17 , 4 , 'aaaTY' ) ;
INSERT INTO `menus` VALUES ( 18 , 16 , 3 , 'aaaYT' ) ;
INSERT INTO `menus` VALUES ( 17 , 0 , 2 , 'ty' ) ;
INSERT INTO `menus` VALUES ( 16 , 0 , 1 , 'yt' ) ;
INSERT INTO `menus` VALUES ( 22 , 20 , 7 , 'agagaga' ) ;
Grayen - 16/09/2007 13:28
PHP ver gevorderde
Alstu
if(($rResult = mysql_query('SELECT * FROM menus ORDER BY pid ASC')) !== false && mysql_num_rows($rResult) > 0)
{
function submenu($iCurrent, $aRows, $iLayer = 0)
{
foreach($aRows as $iKey => $aRow)
{
if($aRow['parent'] == $iCurrent)
{
print str_repeat('- ', $iLayer).$aRow['text'].'<br />';
unset($aRows[$iKey]);
submenu($aRow['id'], $aRows, $iLayer + 1);
}
}
return true;
}
$aRows = array();
while(($aRow = mysql_fetch_assoc($rResult)) !== false)
{
$aRows[] = $aRow;
}
submenu(0, $aRows);
}
{
function submenu( $iCurrent , $aRows , $iLayer = 0 )
{
foreach ( $aRows as $iKey => $aRow )
{
if ( $aRow [ 'parent' ] == $iCurrent )
{
submenu( $aRow [ 'id' ] , $aRows , $iLayer + 1 ) ;
}
}
return true ;
}
{
$aRows [ ] = $aRow ;
}
submenu( 0 , $aRows ) ;
}
Gesponsorde links
Dit onderwerp is gesloten .